深入理解 Python中的yield
深入理解 Python3 yield yield是 python 内置的关键字,它能产生一个生成器(Generator)。 0x01. Generators 只要函数中有yield就会变成一个generator object生成器对象,生成器对象可以迭代,但与iterable不同的是它只能迭代一次。先来看一个简单的例子 >>> def foo(): ... yield 1 ... yield 2 ... yield 3 ... >>> g = foo() >>> g <generator object foo at 0x7ffb08326ca8> >>> for i in g: ... print(i) ... ... 1 2 3 >>> for i in g: ... print(i) ... ... >>> 当你调用foo这个函数的时候,函数内部的代码并不立马执行 ,这个函数只返回一个生成器对象,如果有庞大的数据它不像iterable占用内存,会每次调用时才计算产生值。 其实for循环隐式的调用__next__()方法,直到遇到StopIteration停止。 >>> def bar(): ... yield 'a' # 第一次调用next()代码运行到这,产生'a' ... yield 'b' # 第二次调用next()代码运行到这,产生'b' ....