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)

  

 

posted @ 2022-02-11 13:33  caoeryingzi  阅读(30)  评论(0编辑  收藏  举报