51dev.com IT技术开发者社区

51dev.com 技术开发者社区

python-cookbook读书笔记

代码星球阅读(48)2020-10-14 收藏0次评论

  今天开始读《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) 。

 

以上就是python-cookbook读书笔记的全部内容。