python关键字yield
想要理解 yield 先要理解 generators 在此之前要理解 iterables
iterables
当创建一个 list 的时候,可以一个一个的读取数据。这种一个一个读取项目元素称作 iteration
mylist = [1, 2, 3] |
这里 mylist 是 iterable 当使用 list comprehension 时,创建了一个 list 也是 iterable
mylist = [x*x for x in range(3)] |
所有可以使用 for ... in ... 的都是 iterable; lists,strings …
这些 iterables 用着很顺手,但是他们都是存在内存当中的,有时可能并不希望这样,尤其是数据量大的时候
Generators
是 iterators 但是只能迭代一次。Generators 并不在内存存储数据,而是实时生成数据
mygenerator = (x*x for x in range(3)) |
使用 () 代替 [] 但是,mygenerator 不能迭代第二次。
yield
是一个关键字,使用上类似 return 函数会返回一个 generator
def createGenerator(): |
当你调用函数的时候,里面的代码并没有执行,只是返回一个 generator 对象。
然后在使用 for 的时候代码会一次执行