今天开始读《python-cookbook》,书里有许多python优雅的写法,可以作为python的一本进阶书。
感谢译者。项目地址: https://github.com/yidao620c/python3-cookbook
以下是我个人的一些笔记
1、递归并不是python擅长的
2、关于生成器(generator)
一个函数中需要有一个 yield
语句即可将其转换为一个生成器。 跟普通函数不同的是,生成器只能用于迭代操作。
#使用生成器 def frange(start, stop, increment): x = start while x < stop: yield x x += increment #普通函数 def nrange(start, stop, increment): x = start arr=[] while x < stop: arr.append(x) x += increment return arr for i in frange(1,5,0.7): print(i) for i in nrange(1,5,0.7): print(i)
可以看到两个函数用法、输出都一样,但是实现方式完全不同。显然用到生成器函数更加优雅
一个生成器函数主要特征是它只会回应在迭代中使用到的 next 操作,next操作让函数运行到yeild,就返回后面的值为止。然后继续next,直到生成器函数返回退出,迭代终止。因此最后一个next会捕获一个异常
3、collections.deque双端队列。
使用 deque(maxlen=N)
构造函数会新建一个固定大小的队列。当新的元素加入并且这个队列已满的时候, 最老的元素会自动被移除掉。
在队列两端插入或删除元素时间复杂度都是 O(1)
,区别于列表,在列表的开头插入或删除元素的时间复杂度为 O(N)
。