可迭代对象 vs 迭代器 vs 生成器
可迭代对象:有__iter__()方法并返回自己,(列表,字符串,字典,集合,tuple,文件,管道对象等)
迭代器:有__next__()方法
生成器:特殊的迭代器用yield代替return,是一个可以延迟创建值的工厂
注意:可迭代的类中,一般实现以下两个方法,__iter__()
以及__next()__
方法,__iter__()
方法返回self
>>> class fib: ... def __init__(self): ... self.prev = 0 ... self.curr = 1 ... ... def __iter__(self): ... return self ... ... def __next__(self): ... value = self.curr ... self.curr += self.prev ... self.prev = value ... return value ... >>> f = fib() >>> list(islice(f, 0, 10)) [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
生成器是Python中一种非常强大的特性,它让我们能够编写更加简洁的代码,同时也更加节省内存,使用CPU也更加高效。
使用生成器的小提示:在你的代码中找到与下面代码类似的地方:
def something(): result = [] for ... in ...: result.append(x) return result
用以下代码进行替换:
def iter_something(): for ... in ...: yield x