python cookbook note

python cookbook 非常好!

第一章:数据结构和算法

1.1 解压序列赋值给多个变量

例子:

1
2
data = [ 'ACME', 50, 91.1, (2012, 12, 21), 98 ]
_, _, weight, (year, month, day), _ = data

学到:tuple可以解压;可以多层解压;不想要的变量用_接受;

1.2 解压可迭代对象赋值给多个变量

可用来分割字符串以及其他多种用途;可以抛弃(用_ign)/接受任意多个元素;*表达式解压出来的数据,无论是0个还是n个,type都是list。

1
2
line = 'nobody:*:-2:-2:Unprivileged User:/var/empty:/usr/bin/false'
uname, *_, homedir, sh = line.split(':')

还能用这种分割语法去巧妙的实现递归算法:
def sum(items):
head, *tail = items
return head + sum(tail) if tail else head

1.3 保留最后 N 个元素

学到了deque(maxlen)for line in file_f:

1.4 查找最大或最小的 N 个元素

learn headq module (For details see python note )

当要查找的元素个数相对比较小的时候,函数 nlargest() 和 nsmallest() 是很合适的。 如果你仅仅想查找唯一的最小或最大(N=1)的元素的话,那么使用 min() 和 max() 函数会更快些。 类似的,如果 N 的大小和集合大小接近的时候,通常先排序这个集合然后再使用切片操作会更快点 ( sorted(items)[:N] 或者是 sorted(items)[-N:] )。 需要在正确场合使用函数 nlargest() 和 nsmallest() 才能发挥它们的优势 (如果 N 快接近集合大小了,那么使用排序操作会更好些)。

第二章:字符串和文本

2.1 使用多个界定符分割字符串

第四章:迭代器与生成器

4.3 使用生成器创建新的迭代模式

例子:

1
2
3
4
5
6
7
8
def frange(start, stop, increment):
x = start
while x < stop:
yield x
x += increment
for n in frange(0, 4, 0.5):
print(n)
list(frange(0, 1, 0.125))

for和list()都是调用了frange的next。

第九章:元编程

9.1 在函数上添加包装器

9.2 创建装饰器时保留函数元信息

9.3 在函数上添加包装器

reference

谢谢~