Python 个人学习记录

Python 个人学习记录 python v3.8


1、词法

文档链接 [ 链接 ]
运算符优先级 [ 链接 ]

# -*- coding: utf8 -*- 声明源码文件的编码格式,默认 UTF8
# 注释
\ 结尾表示显示行拼接(逻辑行)不支持注释
: 结尾表示下方为一个模组,需要使用空格进行缩进。
三种字符不支持 $ ? ` 会直接报错

算数运算

+ 加
- 减
* 乘
/ 商
// 整除商
% 余数 3 % 2 == 1
** 乘方 0 ** 0 == 1
pow(x,y) 乘方 x 的 y 次幂
abs(x) 绝对值
divmod(x,y) 整除和余数
-x 取反
+x 不变
虽然 abs(x%y) < abs(y) 在数学中必为真,但对于浮点数而言,由于舍入的存在,其在数值上未必为真。 例如,假设在某个平台上的 Python 浮点数为一个 IEEE 754 双精度数值,为了使 -1e-100 % 1e100 具有与 1e100 相同的正负性,计算结果将是 -1e-100 + 1e100,这在数值上正好等于 1e100。 函数 math.fmod() 返回的结果则会具有与第一个参数相同的正负性,因此在这种情况下将返回 -1e-100。 何种方式更适宜取决于具体的应用。
如果 x 恰好非常接近于 y 的整数倍,则由于舍入的存在 x//y 可能会比 (x-x%y)//y 大。 在这种情况下,Python 会返回后一个结果,以便保持令 divmod(x,y)[0] * y + x % y 尽量接近 x.

2、数据格式类型篇

文档链接 [ 链接 ]


2.1、空值 None

此类型只有一种取值。是一个具有此值的单独对象。此对象通过内置名称 None 访问。在许多情况下它被用来表示空值,例如未显式指明返回值的函数将返回 None。它的逻辑值为假。


2.2、数值 numbers.Number

此类对象由数字字面值创建,并会被作为算术运算符和算术内置函数的返回结果。数字对象是不可变的;一旦创建其值就不再改变。Python 中的数字当然非常类似数学中的数字,但也受限于计算机中的数字表示方法。


2.2.1、整数

整数型 (int)

此类对象表示任意大小的数字,仅受限于可用的内存 (包括虚拟内存)。在变换和掩码运算中会以二进制表示,负数会以 2 的补码表示,看起来像是符号位向左延伸补满空位。

可转换的原数据类型 float() str() bytes()
双精度浮点数转换时进行整数部截断,参阅 math.floor() 和 math.ceil()
int(float(x.y)) == x
int(1.23) == 1
int(-4.56) == -4
str() 与 bytes() 转换时,原数据仅允许 数字 和 + - 存在。

布尔型 (bool)

此类对象表示逻辑值 False 和 True。代表 False 和 True 值的两个对象是唯二的布尔对象。布尔类型是整型的子类型,两个布尔值在各种场合的行为分别类似于数值 0 和 1,例外情况只有在转换为字符串时分别返回字符串 “False” 或 “True”。

逻辑值检测 [ 链接 ]

常见的 bool(x) == False 判定
被定义为假值的常量: None 和 False。
任何数值类型的零: 0, 0.0, 0j, Decimal(0), Fraction(0, 1)
空的序列和多项集: '', (), [], {}, set(), range(0)

2.2.2、双精度浮点数 (float)

此类对象表示机器级的双精度浮点数。其所接受的取值范围和溢出处理将受制于底层的机器架构 (以及 C 或 Java 实现)。Python 不支持单精度浮点数;支持后者通常的理由是节省处理器和内存消耗,但这点节省相对于在 Python 中使用对象的开销来说太过微不足道,因此没有理由包含两种浮点数而令该语言变得复杂。

可转换的原数据类型 int() str() bytes()
整数转换时补一位小数.0
float(int(x)) == x.0
str() 转换时,原数据仅允许 数字 和 + - . 存在。(特例是 "nan" "inf"分别表示非数字 NaN 以及 无穷)
bytes() 转换时,原数据仅允许 数字 和 + - . 存在。

2.2.3、双精度浮点数+复数 (complex)

此类对象以一对机器级的双精度浮点数来表示复数值。有关浮点数的附带规则对其同样有效。一个复数值 z 的实部和虚部可通过只读属性 z.real 和 z.imag 来获取。

可转换的原数据类型 int() float() str()
整数和浮点数转换时补一份虚数 0j
complex(int(x)) == x+0j
字符串先转换为整数和浮点数然后再转换为虚数。
(a+bj).real == a
(a+bj).imag == b

2.3、不可变序列

不可变序列类型的对象一旦创建就不能再改变。(如果对象包含对其他对象的引用,其中的可变对象就是可以改变的;但是,一个不可变对象所直接引用的对象集是不能改变的。)


2.3.1、字符串 str()

字符串是由 Unicode 码位值组成的序列。范围在 U+0000 – U+10FFFF 之内的所有码位值都可在字符串中使用。Python 没有 char 类型;而是将字符串中的每个码位表示为一个长度为 1 的字符串对象。内置函数 ord() 可将一个码位由字符串形式转换成一个范围在 0 – 10FFFF 之内的整型数;chr() 可将一个范围在 0 – 10FFFF 之内的整型数转换为长度为 1 的对应字符串对象。str.encode() 可以使用指定的文本编码将 str 转换为 bytes,而 bytes.decode() 则可以实现反向的解码。

.title() 首字母大写
.upper() 全大写
.lower() 全小写 常用方法为自动 lower 过滤字符大小写,需要的时候再整形。

.lstrip() 临时去除开头空白但不写入原数据。
.rstrip() 临时去除末尾空白但不写入原数据。
.strip() 临时去除两端空白但不写入原数据。

.translate 新版本使用说明 [ 链接 ]
.translate(str.maketrans('AX', 'BY', 'CZ'))  对单字符串进行对等替换,将 A 码改为 B 码,将 X 码改为 Y 码,将 C 码和 Z 码删除。
.translate(str.maketrans({'A': 66 }))  对单字符串依 ascii 码非对等替换, 将字符'A'替换为字符'B'。( B = ascii 66; )
.translate(str.maketrans({'A': '\u4f60\u597d' })) 对单字符串依 unicode 码非对等替换, 将字符'A'替换为字符'你好'。( a = unicode &#97; )

2.3.2、元组 tuple()

一个元组中的条目可以是任意 Python 对象。包含两个或以上条目的元组由逗号分隔的表达式构成。只有一个条目的元组 (‘单项元组’) 可通过在表达式后加一个逗号来构成 (一个表达式本身不能创建为元组,因为圆括号要用来设置表达式分组)。一个空元组可通过一对内容为空的圆括号创建。

tup = ( 'one', 'two', 'three', 'four' )

读取方式(负数从后调用)
tup[0] 获取元组首元素 == one
tup[-1] 获取元组尾元素 == four
tup[1:3] 获取元组指定元素段 1<= x <3 == [ 'two', 'three']
len(tup) 获取元组长度
max(tup) 获取元组最大元素
min(tup) 获取元组最小元素

元组不可被编辑
del tup 删除整个元组

2.3.3、字节串 bytes()

字节串对象是不可变的数组。其中每个条目都是一个 8 位字节,以取值范围 0 <= x < 256 的整型数表示。字节串字面值 (例如 b’abc’) 和内置的 bytes() 构造器可被用来创建字节串对象。字节串对象还可以通过 decode() 方法解码为字符串。


2.4、可变序列

可变序列在被创建后仍可被改变。下标和切片标注可被用作赋值和 del (删除) 语句的目标。


2.4.1、列表 list()

列表中的条目可以是任意 Python 对象。列表由用方括号括起并由逗号分隔的多个表达式构成。(注意创建长度为 0 或 1 的列表无需使用特殊规则。)
列表支持多层列表互相嵌套

list = [ 'one', 'two', 'three', 'four' ]
list( range( 2 , 14 , 3 ) ) =  [ '2', '5', '8', '11' ] 
range(a,b,x) 创建一个列表,最小是 a ,最大是 b ,步进是 x(但不会等于 b)

读取方式(负数从后调用)
list[0] 获取列表首元素 == one
list[-1] 获取列表尾元素 == four
list[1:3] 获取列表指定元素段 1<= x <3 == [ 'two', 'three']
len(list) 获取列表长度
max(list) 获取列表最大元素
min(list) 获取列表最小元素
.index('one') 在列表中查找第一个满足条件的元素所在位置

修改方式
.append('five') 在列表中追加一个元素(插入在列表最后的位置)
.insert(0, 'six') 在列表中的目标位置插入一个元素(插入点元素顺次右移)
del list[0] 在列表中完全删除一个元素(删除点元素顺次左移)并不再使用
.pop(0) 在列表中的目标位置弹出一个元素(弹出点元素顺次左移)并可以直接赋值使用(默认最后一个元素)
.remove('one') 在列表中查找第一个满足条件的元素将其删除(删除点元素顺次左移)并可以直接赋值使用
.count('one') 在列表中查找满足条件的元素的个数
.extend(listnew) 在列表后追加新列表中的所有元素
.copy(listnew) 复制列表数据到新的列表中(深拷贝)(修改影响自身)
list1 = list2 将 list1 的内存指向到 list2 上(浅拷贝)(修改影响两个)

排序方式
.sort() 对列表进行 按首字母升序排序 并将排序写入到该列表,使用参数'reverse=True'变成降序
.sorted() 对列表进行 按首字母升序排序 但不将排序写入到该列表,使用参数'reverse=True'变成降序
.reverse() 对列表进行 反转排序 并将排序写入到该列表

2.4.2、字节数组

2.5、集合


2.6、映射 (字典)


3、篇

dict()
set()
hex()

4、篇


5、篇

6、相关链接

Python3 类型转换指南 [ 链接 ]

点赞