《流畅的Python》读书笔记一
通过内置的函数(例如 len、iter、str,等等)来使用特殊方法是最好的选择。这些内置函数不仅会调用特殊方法,通常还提供额外的好处,而且对于内置的类来说,它们的速度更快
Python 有一个内置的函数叫 repr,它能把一个对象用字符串的形式表达出来以便辨认,这就是“字符串表示形式”。repr 就是通过 __repr__这个特殊方法来得到一个对象的字符串表示形式的
生成器表达式的语法跟列表推导差不多,只不过把方括号换成圆括号而已。
在元组拆包中使用 *可以代表任意数量的元素,同时也可以放在任何地方,元组还可以嵌套拆包,只要一一对应就行了。
为什么切片区间会忽略最后一个元素:当只有最后一个位置信息时,我们也可以快速看出切片和区间里有几个元素:range(3) 和 my_list[:3] 都返回 3 个元素。当起止位置信息都可见时,我们可以快速计算出切片和区间的长度,用后一个数减去第一个下标(stop - start)即可。可以利用任意一个下标来把序列分割成不重叠的两部分,只要写成 my_list[:x] 和 my_list[x:] 就可以了。
当操作只包含数字的列表,那么 array.array 比 list 更高效
如果在插入新元素的同时还想保持有序序列的顺序,那么需要用到 bisect.insort。bisect.bisect 的作用则是快速查找。
原子不可变类型(str,bytes和数值类型)可以散列,对于元组,只有元组内所有的元素都可以散列的情况下,它才是可散列的
可以通过dict.setdefault()方法来设置默认值,dict.setdefault()方法接收两个参数,第一个参数是健的名称,第二个参数是默认值。假如字典中不存在给定的键,则返回参数中提供的默认值;反之,则返回字典中保存的值。
types 模块中引入了一个封装类名叫MappingProxyType。如果给这个类一个映射,它会返回一个只读的映射视图。虽然是个只读视图,但是它是动态的。这意味着如果对原映射做出了改动,我们通过这个视图可以观察到,但是无法通过这个视图对原映射做出修改。
不要对字典迭代的同时进行修改,因为当往字典里添加新的键时,字典可能会进行扩容,所以如果在迭代的时候修改可能会跳过某些键,如果要进行这个操作,需要先对字典进行迭代,得到先要更新的内容,在迭代结束以后进行修改。
字符的标识,即码位,是 0~1 114 111 的数字(十进制),在Unicode 标准中以 4~6 个十六进制数字表示,而且加前缀“U+”
字符的具体表述取决于所用的编码。编码是在码位和字节序列之间转换时使用的算法。
把字节序列变成人类可读的文本字符串就是解码,而把字符串变成用于存储或传输的字节序列就是编码。