python
类型与运算
可变类型与不可变类型
- 核心类型中,数字、字符串和元组是不可变的;列表和字典不是这样
- 可作用于多种类型的通用型操作都是以内置函数或表达式的形式出现的[例如,len(X),X[0]]
数据类型
字符串
列表
image.png
image.png
字典
image.png
image.png
元组tuple
- 基本上就像一个不可以改变的列表
- 从语法上讲,它们编写在圆括号中而不是方括号中,它们支持任意类型、任意嵌套以及常见的序列操作:
- 真正的不同之处就在于一旦创建后就不能再改变。也就是说,元组是不可变的序列:
文件
image.png
数字
传统除法、Floor除法和真除法
类型属于对象,而不是变量
Python的变量就是在特定的时间引用了一个特定的对象。
共享引用
image.png
image.png
image.png
此时,并不是替换了原始的a对象,而是让这个变量去引用完全不同的一个对象,所以,b的值并不会因此改变。
有一些对象和操作确实会在原处改变对象(可变对象,如列表等)。对于支持这种在原处修改的对象,共享引用时的确需要加倍的小心,因为对一个变量名的修改会影响其他的变量。
使用分片进行copy
image.png
语句与语法
语句
image.png
image.png
赋值
image.png
image.png
image.png
image.png
这和分片内在的相似,但是不完全相同——一个序列解包赋值总是返回多个匹配项的一个列表,而分片把相同类型的一个序列作为分片的对象返回:
image.png
迭代器和解析
列表解析
image.png
快于
image.png
python3中新的可迭代对象
函数
参数匹配法则
image.png
image.png
函数高级特征
递归
间接函数调用
image.png
image.png
内省函数
函数自身的诸如名字的属性
func.name
匿名函数:lambda
image.png
由def创建并赋值后的函数对象工作起来是完全一样的
不过,·lambda是一个表达式,而不是一个语句
image.png
在序列中映射函数 map
image.png
image.png
看就明白
函数式编程工具:filter和reduce
理解为过滤:
image.png
image.png
迭代和解析
列表表达式
image.png
image.png
image.png
列表解析和矩阵
生成器
生成器在内存使用和性能方面都更好
函数包含一条yield语句,他们返回一个可迭代对象
image.png
生成器表达式:迭代器遇到列表解析
image.png
生成器表达式大体上可以认为是对内存空间的优化,它们不需要像方括号的列表解析一样,一次构造出整个结果列表。它们在实际中运行起来可能稍慢一些,所以它们可能只对于非常大的结果集合的运算来说是最优的选择。关于性能的更权威的评价,必须等到我们在本章稍后编写计时脚本的时候给出。
生成器是单迭代器对象
image.png
这与某些内置类型的行为不同,它们支持多个迭代器并且在一个活动迭代器中传递并反映它们的原处修改。
image.png