Python教程笔记
- 3.1.1 数字
- 3.1.2 文本
- 3.1.3 列表
- 4.2 for语句
- 4.3 range()函数
- 4.7 match语句
- 4.8 定义函数
- 4.9.1 默认值参数
- 4.9.3 特殊参数
- 4.9.5. 解包实参列表
对官方教程中自我感觉生疏的知识点做个记录,以便后面回顾。
3.1.1 数字
- 除法运算 (/) 总是返回浮点数。 如果要做 floor division 得到一个整数结果你可以使用 // 运算符,往小的方向取整数。
- 交互模式下,上次输出的表达式会赋给变量 _。
3.1.2 文本
-
原始字符串还有一个微妙的限制:一个原始字符串不能以奇数个 \ 字符结。
-
相邻的两个或多个 字符串字面值 (引号标注的字符)会自动合并,拼接分隔开的长字符串时,这个功能特别实用,这项功能只能用于两个字面值,不能用于变量或表达式:
>>>text = ('Put several strings within parentheses '
... 'to have them joined together.')
>>>text
'Put several strings within parentheses to have them joined together.'
- 索引还支持负数,用负数索引时,从右边开始计数
- 还可以这样理解切片,索引指向的是字符 之间 ,第一个字符的左侧标为 0,最后一个字符的右侧标为 n ,n 是字符串长度。例如:
第一行数字是字符串中索引 0…6 的位置,第二行数字是对应的负数索引位置。i 到 j 的切片由 i 和 j 之间所有对应的字符组成。+---+---+---+---+---+---+| P | y | t | h | o | n |+---+---+---+---+---+---+ 0 1 2 3 4 5 6 -6 -5 -4 -3 -2 -1
3.1.3 列表
- 切片操作返回包含请求元素的新列表。以下切片操作会返回列表的 浅拷贝:
>>>correct_rgba = rgba[:] >>>correct_rgba[-1] = "Alpha" >>>correct_rgba ["Red", "Green", "Blue", "Alpha"] >>>rgba ["Red", "Green", "Blue", "Alph"] #这里值变了还是浅拷贝是因为字符串本身为不可变。
为切片赋值可以改变列表大小,甚至清空整个列表。
4.2 for语句
- 很难正确地在迭代多项集的同时修改多项集的内容。更简单的方法是迭代多项集的副本或者创建新的多项集:
# 创建示例多项集 users = {'Hans': 'active', 'Éléonore': 'inactive', '景太郎': 'active'} # 策略:迭代一个副本 for user, status in users.copy().items():if status == 'inactive':del users[user]# 策略:创建一个新多项集 active_users = {} for user,status in users.items():if status == 'active':active_users[user] = status
4.3 range()函数
- rang()返回的对象只有在被迭代时才一个一个地返回所期望的列表项,并没有真正生成过一个含有全部项的列表,从而节省了空间,这种对象称为可迭代对象 iterable。
4.7 match语句
- 自定义类可通过在类中设置特殊属性 match_args,为属性指定其在模式中对应的位置。
- 建议这样来阅读一个模式——通过将其视为赋值语句等号左边的一种扩展形式,来理解各个变量被设为何值。
- 与解包赋值类似,元组和列表模式具有完全相同的含义并且实际上都能匹配任意序列,区别是它们不能匹配迭代器或字符串。???
- 序列模式支持扩展解包:[x, y, *rest] 和 (x, y, *rest) 和相应的解包赋值做的事是一样的。接在 * 后的名称也可以为 ,所以 (x, y, *) 匹配含至少两项的序列,而不必绑定剩余的项。???
- 映射模式:{“bandwidth”: b, “latency”: l} 从字典中捕获 “bandwidth” 和 “latency” 的值。额外的键会被忽略,这一点与序列模式不同。**rest 这样的解包也支持。(但 **_ 将会是冗余的,故不允许使用。)???
- 大多数字面值是按相等性比较的,但是单例对象 True、False 和 None 则是按 id 比较的。
- 模式可以使用具名常量。它们必须作为带点号的名称出现,以防止它们被解释为用于捕获的变量。
4.8 定义函数
- 函数内的第一条语句是字符串时,该字符串就是文档字符串,利用文档字符串可以自动生成在线文档或打印版文档,还可以让开发者在浏览代码时直接查阅文档。
- 函数在 执行 时使用函数局部变量符号表,所有函数变量赋值都存在局部符号表中;引用变量时,首先,在局部符号表里查找变量,然后,是外层函数局部符号表,再是全局符号表,最后是内置名称符号表。因此,尽管可以引用全局变量和外层函数的变量,但最好不要在函数内直接赋值(除非是 global 语句定义的全局变量,或 nonlocal 语句定义的外层函数变量)。
- 在调用函数时会将实际参数(实参)引入到被调用函数的局部符号表中;因此,实参是使用 按值调用 来传递的(其中的 值 始终是对象的 引用 而不是对象的值)。 [1] 当一个函数调用另外一个函数时,会为该调用创建一个新的局部符号表。
4.9.1 默认值参数
- 默认值在 定义 作用域里的函数定义中求值。重要警告: 默认值只计算一次。默认值为列表、字典或类实例等可变对象时,会产生与该规则不同的结果。
4.9.3 特殊参数
以下用例决定哪些形参可以用于函数定义:
def f(pos1, pos2, /, pos_or_kwd, *, kwd1, kwd2):
说明:
- 使用仅限位置形参,可以让用户无法使用形参名。形参名没有实际意义时,强制调用函数的实参顺序时,或同时接收位置形参和关键字时,这种方式很有用。
- 当形参名有实际意义,且显式名称可以让函数定义更易理解时,阻止用户依赖传递实参的位置时,才使用关键字。
- 对于 API,使用仅限位置形参,可以防止未来修改形参名时造成破坏性的 API 变动。
4.9.5. 解包实参列表
- 函数调用要求独立的位置参数,但实参在列表或元组里时,要执行相反的操作。用 * 操作符把实参从列表或元组解包出来, 字典可以用 ** 操作符传递关键字参数。
https://docs.python.org/zh-cn/3.13/contents.html
Python教程: 本教程只是简单介绍了 Python 语言概念和功能。
Python标准库: 介绍了与 Python 一同发行的标准库。
Python语言参考手册: 本参考手册介绍了 Python 句法与“核心语义”。
Python文档目录: 每个版本的新增内容与改进。