fluent python-chap2
1. 内置序列类型
容器序列: list tuple collections.deque 可以存放不同类型的数据。 存放的是它们所包含的任意类型的对象的引用。
扁平序列: str bytes bytearray memoryview array.array 只能容纳一种类型,存放的是值而不是引用,是一段连续的内存空间,更加紧凑。
PS.此处我还没找到方法,就是怎么验证扁平序列是一段连续的内存空间。
列表推导式,尽量简单,代码不超过两行,python会忽略[],{},()内的续行符,因此可省略续行符\。
元组拆封,使得元组可以完美地被当作记录来使用。
具名元组namedtuple构建带字段名的元组和一个有名字的类,但是python并不会用__dict__来存放,这使得其内存消耗和元组是一样的。
列表没办法想numpy的数组那样,直接乘一个数,放大多少倍,可以用列表推导式。
test_str = [1,2,3,4,5,6,7] test_str1 = test_str*2 print(test_str1) test_str = [i*2 for i in test_str] print(test_str)
# healthy board = [['_']*3 for i in range(3)] # unhealthy w_board = [['_']*3]*3
比较有趣的地方,两个id一样:
l = [1,2,3] print(id(l)) l*=2 print(id(l))
array.tofile和array.fromfile比文本文件读取速度快60倍,占用的字节数也比文本文件少一个数量级。
from array import array from random import random floats = array('d',(random() for i in range(10**7))) fp = open('floats.bin','wb') floats.tofile(fp) fp.close() floats2 =array('d') fp = open('floats.bin','rb') floats2.fromfile(fp,10**7) fp.close() print(floats==floats2)
memoryview没太看懂……
sort,sorted,以及max, min函数有key参数,这个很有意思。
ll = [32,28,'11','9',19,20,5] # sort as str lt = sorted(ll,key=str) print(lt) # sort as int lt2 = sorted(ll,key=int) print(lt2)
Sophie的世界,转载请注明出处,谢谢。