Python的学习记录

2023-11-01

在这里插入图片描述

Python

The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!

基础语法

学习于《Python编程:从入门到实践》

命名

  • 数字,字母,下划线构成,数字不能打头,不含空格
  • 区分大小写
  • 不能于关键字重名

数据结构

数字

不可分割的原子类型,包括整数和浮点数

a = 1 #普通赋值
a += 1 #增量赋值
a = b =1 #多重赋值
(x,y) = (1,2) #多元赋值

复数:real + imag j,虚数部分必须用j或J结尾

a_complex = 1+2j
a_complex  #(1+2j)
complex(1,2) #(1+2j)
a_complex.conjugate() #共轭复数 (1-2j)

常用方法

abs(-1)  #绝对值 1
divmod(10,3) #除留余数  (3,1)
pow(2,3) #幂次运算  8
round(5.6) #四舍五入  6
int()
float()
bool()
字符串

由Unicode码位构成的不可变序列

str1 = 'apple'  #单引号和双引号不区分
str2 = "apple"\ #换行需要 \,不收录行前的空格 'apple2'
     "2"
str3 = ''' apple 
     apple'''#三引号任意换行,收录空格  'apple\n     apple'
str()

转义字符:\n(换行符)、\t(Tab制表符)、\'(单引号)、\"(双引号)、 \\ (反斜线)

chr(65)  #整数对应的Unicode字符  A
ord("A)  #相反  65

常用方法

a = "1-2-3-4-5"
b = a.split('-')  #分割 ['1', '2', '3', '4', '5']
'*'.join(b)  #合并  '1*2*3*4*5'
a.strip('\n')  #去除两端指定字符
a.rstrip() #去除右端空格
a.lstrip()
a.find('1') #第一次出现的位置 0  未找到返回-1
a.rfind('1') #最后一次出现的位置
a.count("1") #子串出现的次数
a.replace("1","2",1) #替换指定字符串,替换一次。 #'2-2-3-4-5'
  1. 关系操作符:in ,not in
  2. 连接操作: +
  3. 重复操作符:* ,负数按0处理
  4. 切片操作符:a[];a[:],a[::]
str1 = '1234567'
a[0]   #'1'
a[0:2]  #'12'
a[::-1]  #逆置 '7654321'
a[-1:-3:-1] #负数索引从-1开始  '76',步长不同向则为空
列表

列表由一系列特定顺序排列的元素组成。

a_list = [1,"2",(1,),{22},[1,2]]
list((1,2)) # 创建 [1,2]
a_list[0] # 1  切片操作,同字符串一致
a_list[:2] #[1,"2"]
a_list[::-1]

常用方法

a_list[0] = 2 #修改  [2,"2",(1,),{22},[1,2]]
a_list[:2] = 1,2 #修改
a_list.append(2222)  #增加 [1, '2', (1,), {22}, [1, 2], 2222]
a_list.insert(1,333) #插入指定位置 [1, 333, '2', (1,), {22}, [1, 2], 2222]
a_list.pop(0)  #弹出指定位置值 1
a_list.remove(2) #删除指定的值  ValueError
del a_list[0] #删除指定位置元素,自动补齐
a_list.count("2") #统计值个数
a_list.sort(reverse=True) #永久排序,元素为同一类型时可以,a_list改变
b_list = sorted(a_list) #临时排序,a_list不变
a_list.extend(b_list)#合并,等价于a +=b
a_list.reverse() #逆置
len(a_list) #返回长度
元组

不可变的列表

t = (1,) #单元素逗号结尾
t = (1,2)
t[0]  #取值 1
tuple([1,2]) #创建 (1,2)
a,b = (1,2) #解包 a=1,b=2
字典

python中唯一的映射类型,有键值对构成,键可以被哈希,不能重复,不可变,包括:布尔型,整型,浮点型,元组等。

a = {}  #空字典,而不是空列表
a_dict = {1:3,2:4}
dict([[1,2]]) #创建,参数必须是双值子序列
a_dict[1]   #访问 3
a_dict[3] = 5  #添加
a_dict[1] = 9 #修改 {1:9,2:4,3:5}
del a_dict[1] #删除键值对

常用方法

a_dict.keys()    #键列表  dict_keys([1, 2, 3])
a_dict.values()  #值列表  dict_values([9, 4, 5])
a_dict.items()  #返回键值对元组列表,dict_items([(1, 9), (2, 4), (3, 5)])
a_dict.update(b_dict) #合并 ,b合并到a上
a_dict.pop(1) #弹出指定键
a_dict.clear() #清空 {}
集合

分为可变集合和不可变集合,不可变集合相当于字典中键的集合,元素唯一。

a_set = {1,2}
a_set = set((1,2,3,3)) #{1, 2, 3}

常用方法

a_set.add(4)     #添加  {1, 2, 3, 4}
a_set.remove(4)  #删除 {1, 2, 3}
a_set.update(b)  #更新

子集/超集判定: <、<=、>、>=

a = {1,2,3,4}
b = {2,3,4,5}

a|b  #并集   {1, 2, 3, 4, 5}
a&b  #交集   {2, 3, 4}
a-b  #差集   {1}
a^b  #对称差集 {1, 5} = 并集-交集

可用于所有集合的方法

s.issubset(t)            # 如果s是t的子集,返回True
s.issuperset(t)          # 如果s是t的超集,返回True
s.union(t)               # 返回一个新集合(s和t的并集)
s.intersection(t)        # 返回一个新集合(s和t的交集)
s.difference(t)          # 返回一个新集合(s - t)
s.symmetric_difference(t)# 返回一个新集合(s ^ t)
s.copy()                 # 返回一个新集合,它是s的浅复制

仅用于可变集合的方法

s.update(t)              # 用t中的元素更新s
s.intersection_update(t) # s中现在是s和t的交集
s.difference_update(t)   # s中现在是(s - t)
s.symmetric_difference_update(t)
                         # s中现在是s和t异或的结果
s.add(obj)               # 在s中添加对象obj
s.remove(obj)            # 从s中删除对象obj,如果不存在则引发KeyError异常
s.discard(obj)           # 如果obj是s的元素,就从s中删除
s.pop()                  # 删除s中任意一个对象,并返回
s.clear()                # 删除集合s中的所有元素
循环结构

for循环

for i in range(5):
    print(i,end=" ")  #0 1 2 3 4 

print(1 if 2<3 else 2)#三元操作符

while循环

i =0
while(i<5):
    print(i,end=' ')
    i+=1  #0 1 2 3 4 

break:结束循环
continue:跳过当前循环
pass:占位,无实际意义

for i in range(10):
    if( i==1):
        continue
    elif(i==2):
        pass
    elif(i==6):
        break
    
    print(i,end=" ") #0 2 3 4 5 
输入输出

input()获取输入,返回字符串

message = input("请输入内容空格相隔:")
请输入内容空格相隔:1 2 3 4
a,b,c,d = message.split(" ")
a # "1"

print()输出

%s 字符串
%d 十进制数
%x 十六进制数
%o 八进制数
%f 浮点类型数
%e 以科学计数法表示的浮点数
%g 十进制或科学计数法表示的浮点数
%% 文本值%本身

n = 42
f = 7.03
s = 'string cheese'

# 以默认宽度格式化
'%d %f %s' % (n, f, s)  # '42 7.030000 string cheese'

# 最小域宽10个字符,右对齐,左侧不够空格填充
'%10d %10f %10s' % (n, f, s)  # '        42   7.030000 string cheese'

# 将上例 ⬅️对齐
'%-10d %-10f %-10s' % (n, f, s)  # '42         7.030000   string cheese'

# 将上例 ➡️对齐,最大字符宽度为4
'%10.4d %10.4f %10.4s' % (n, f, s)  # '      0042     7.0300       stri'

# 去掉最小域宽为10的限制
'%.4d %.4f %.4s' % (n, f, s)  # '0042 7.0300 stri'

# 将域宽、字符宽度等设定为参数
'%*.*d %*.*f %*.*s' % (10, 4, n, 10, 4, f, 10, 4, s)
# '      0042     7.0300       stri'
'{} {} {}'.format(n, f, s)  # '42 7.03 string cheese'

# 指定插入的顺序
'{2} {0} {1}'.format(f, s, n)  # '42 7.03 string cheese'

# 参数为字典或命名变量,格式串中标识符可以引用这些名称
'{n} {f} {s}'.format(n=42, f=7.03, s='string cheese')  # '42 7.03 string cheese'

d = dict(n=42, f=7.03, s='string cheese')  # {'f': 7.03, 'n': 42, 's': 'string cheese'}
# {0} 代表整个字典,{1}代表字典后面的字符串'other'
'{0[n]} {0[f]} {0[s]} {1}'.format(d, 'other')  # '42 7.03 string cheese other'
'{0:d} {1:f} {2:s}'.format(n, f, s)  # '42 7.030000 string cheese'

'{n:d} {f:f} {s:s}'.format(n=42, f=7.03, s='string cheese')  # '42 7.030000 string cheese'
函数

定义:

def doing(*args,**kwargs):
	return 0  #可省
doing()

参数的传递

  • 传递可变对象的引用(字典,列表,集合等),在函数体内不创建新的对象,而是直接修改所传递的对象。(传递列表的副本,不影响原件,a[:])
  • 传递不可变对象的引用(数字,字符串,元组),由于对象不可变,会创建新的对象。

参数类型

  • 位置参数:def doing(a,b,c),参数顺序有要求
  • 关键字参数:def doing(a =1,b=2),传参是指定键名
  • 可变位置参数:def doing(*args),使用来收集任意数量的位置参数,为元组格式。
def print_more(arg1, arg2, *rest_args):
    print(arg1,end=" ")
    print(arg2, end=" ")
    print(rest_args)

print_more(3, 2, 1) #3 2 (1,)
  • 可变关键字参数:def doing(**kwargs),为字典格式。
def print_kwargs(**kwargs):
    print(kwargs)

print_kwargs(arg1=1, arg2=2, arg3='a')
lisr = {'qq':'112'}
print_kwargs(**lisr)
结果:
{'arg1': 1, 'arg2': 2, 'arg3': 'a'}
{'qq': '112'}

匿名函数

a = lambda x:x**2
a(3) #9

class用来实例化对象

class Person():
    pass
p = Person()

方法类型

  • 实例方法(instance method):第一个参数为self
  • 类方法 (class method):第一个参数为类本身,通常写作cls
  • 静态方法 (static method):参数无特殊规定
  • 魔法方法:以双下划线开头和结尾的方法,可以为符号赋予特殊作用。

类方法和静态方法类本身和类的实例化对象都可以调用,实例方法只能实例化对象调用。

class A():
    count = 0
    def __init__(self):
        A.count += 1
    
    @classmethod
    def kid(cls):
        print('A has', cls.count, 'little objects')
    
    @staticmethod
    def static_method():
        print('Static method called!')

魔术方法

class Word():
    def __init__(self, text):
        self.text = text
    
    def __eq__(self, word2):
        return self.text.lower() == word2.text.lower()

first = Word('ha')
second = Word('HA')
first == second #True

  • 用于比较的魔术方法
__lt__(self, other)    self < other
__le__(self, other)    self <= other
__eq__(self, other)    self == other
__ne__(self, other)    self != other
__gt__(self, other)    self > other
__ge__(self, other)    self >= other
  • 普通算数操作符
__add__(self, other)      加法 +
__sub__(self, other)      减法 -
__mul__(self, other)      乘法 *
__floordiv__(self, other) 整数除法 //
__truediv__(self, other)  真除法 /
__mod__(self, other)      取模算法 %
__divmod___(self, other)  内置divmod()函数
__pow__(self, other)      指数运算 **
__lshift__(self, other)   左移 <<
__rshift__(self, other)   右移 >>
__and__(self, other)      按位与 &
__or__(self, other)       按位或 |
__xor__(self, other)      按位异或 ^
  • 其他的魔术方法
__str__(self) 等价于str(self),定义如何打印对象信息,print()str()以及字符串格式化相关方法都会用到__str__()。
__repr__(self) 等价于repr(self),交互式解释器适用此方法输出变量。
__len__(self) 等价于len(self)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python的学习记录 的相关文章

随机推荐

  • 知识图谱在金融领域的分析与应用

    本文首发于个人博客 www bobinsun cn 前言 知识图谱因其自身的图展示 图挖掘 图模型计算优势 可帮助金融从业人员进行业务场景的分析与决策 有利于建立客户画像 进行精准营销获客 发现信用卡套现 资金挪用等行为 更好的表达 分析金
  • 车规级MCU知识介绍

    一辆传统燃油车需要大约500到600颗芯片 轻混汽车大约需要1000颗 插电混动和纯电动汽车则需要至少2000颗芯片 这就意味着在智能电动汽车快速发展的过程中 不仅对先进制程芯片需求不断增加 而且对传统芯片需求也会持续增加 MCU就是这样
  • PXE装机报错汇总

    报错1 PXE E53 No boot filename received CLIENT MAC ADDR 88 0C 29 0D 88 3C GUID 564D6429 2E4A 0B83 6161 AE0A050D803C PXE MB
  • 【持续集成CI/持续部署CD】二、Docker安装Maven私服Nexus

    本文是关于通过 Docker 进行安装部署 Nexus3 私服的快速入门和简单使用案例 一 安装 1 通过 docker 获取最新版本的 nexus3 镜像 docker pull sonatype nexus3创建 docker 镜像到宿
  • Pytorch中交叉熵损失函数 nn.CrossEntropyLoss()计算过程

    pytorch的交叉熵损失函数是如何计算outputs和 labels之间的损失的 对于一个分类问题的CNN模型 最后一层的代码一般如下 nn Linear 2048 num classes 然后计算一次迭代损失的代码一般如下 loss f
  • 国教 2019级 算法设计与分析 作业集锦(期末作业)

    7 1 寻找第k小的数 20 分 给定若干整数 请设计一个高效的算法 确定第k小的数 输入格式 测试数据有多组 处理到文件尾 每组测试数据的第1行输入2个整数n k 1 k n 1000000 第2行输入n个整数 每个数据的取值范围在0到1
  • Linux内核的配置和编译

    文章目录 前言 1 内核介绍 2 linux内核源码目录结构 3 内核配置和编译实验 4 内核的配置原理 5 menuconfig 6 Kconfig文件详解 7 menuconfig的实验 前言 以下内容基于2 6 35 7版本内核 文件
  • MyBatis和Hibernate相比,优势在哪里

    看到现在好多Web项目用了MyBatis 没感觉MyBatis好到哪里了 从开发效率上讲 不管是Hibernate的反向工程 还是自动建表 关联映射都比MyBatis方便得多 难道仅仅是因为运行速度 Hibernate也有缓存啊 或者 二者
  • 生成带有目录的Markdown格式文档

    什么是Markdown Markdown 是一种轻量级的 标记语言 它的优点很多 目前也被越来越多的写作爱好者 撰稿者广泛使用 使用 Markdown 的优点 专注你的文字内容而不是排版样式 轻松的导出 HTML PDF 和本身的 md 文
  • 性能测试出现:java.net.NoRouteToHostException: Can‘t assign requested address (Address not available)解决方案

    前言 在性能测试中会常常遇到java net NoRouteToHostException Can t assign requested address Address not available 这个问题 什么原因导致的呢 这个原因不一定
  • 全网最全Log配置教程及框架性能比较,看这篇就够了!

    每天早上七点三十 准时推送干货 一 摘要 不管是使用何种编程语言 何种框架 日志输出几乎无处不再 也是任何商业软件中必不可少的一部分 总结起来 日志的用途大致可以归纳成以下三种 问题追踪 通过日志不仅仅包括我们程序的一些bug 也可以在安装
  • VS堆栈溢出异常

    总是会遇到报堆栈溢出异常未处理错误 解决过几次 但是下次还是忘记怎么处理 所以写在博客上做个笔记 错误如图 解决方法 项目解决方案里右键项目 选择属性 在堆栈保留处输入40000000 4G64位电脑经验值 8G内存就要输入80000000
  • TiDB数据库权限管理

    TiDB数据库权限管理 TiDB 的权限管理系统按照 MySQL 的权限管理进行实现 TiDB 支持大部分的 MySQL 的语法和权限类型 本文主要介绍 TiDB 权限相关操作 各项操作需要的权限以及权限系统的实现 权限相关操作 授予权限
  • 将vue默认下载项yarn切换成npm

    今天在使用vue下载时发现 之前默认的npm变成了yarn 不习惯 下面将介绍如何将vue下载默认项yarn切换成npm 第一步 需要找到文档下的 vuerc 第二步 用编辑器 或者可以打开文本的软件 将其打开 打开后是这样的 第三步 其实
  • IDEA的查询引用、调用关系图的功能

    Eclipse的 Call Hierarchy 可以查看一个Java方法或类成员变量的调用树 caller和callee两个方向 非常方便 在IDEA中类似功能被划分到了三个命令 IntelliJ IDEA中可以在主菜单中选择Navigat
  • Git报错 Incorrect username or password (access token) 的解决方式

    错误原因 在使用git的时候 出现 Incorrect username or password access token 这个报错主要就是代表本地保存的gitee或者GitHub的账号还有密码错误 而他们这些账号密码都保存到了window
  • 移动端网络优化

    http b codekk com detail Trinea E7 A7 BB E5 8A A8 E7 AB AF E7 BD 91 E7 BB 9C E4 BC 98 E5 8C 96 一个网络请求可以简单分为连接服务器 gt 获取数据
  • centos python 升级3.7 及pip

    centos 7 6 1810 python3 6升级3 7 查看系统版本 开始升级 1 下载Python 3 7 0 tgz软件包 2 解压编译 3 更改默认python版本 pip2消失的话 查看系统版本 cat etc redhat
  • OSI七层协议大白话解读

    互联网的本质就是一系列的网络协议 这个协议就叫OSI协议 一系列协议 按照功能不同 分工不同 人为的分层七层 实际上这个七层是不存在的 没有这七层的概念 只是人为的划分而已 区分出来的目的只是让你明白哪一层是干什么用的 每一层都运行不同的协
  • Python的学习记录

    Python The Zen of Python by Tim Peters Beautiful is better than ugly Explicit is better than implicit Simple is better t