以下来自 What does the “yield” keyword do?
啥时候用 yield
当你知道这个函数需要返回一大堆值,但你每次只需要读一次的时候,就可以在这个函数里使用yield。
这样就会更加memory efficient and faster。
it’s handy when you know your function will return a huge set of values that you will only need to read once.
解释 1
一般是写一个function,里边有 yield。
yield 关键字的用法和return 差不多,只不过返回的是生成器generator。
我们调用该函数的时候,该函数体并未执行,而是返回来一个 generator 对象。
那么函数体啥时候执行呢?
当我们的 for 使用 generator 对象的时候!
每次for 调用 generator 对象的时候,函数体就会执行,直到遇到yield,此时就会返回第一个循环值.
什么是generator:
>>> mygenerator = (x*x for x in range(3))
>>> for i in mygenerator:
... print(i)
0
1
4
这个东西用了一次就没了,因此不能再一次运行 for i in mygenerator 了。
解释 2
如何去简单地理解使用yield的函数呢?
可以这么理解:
- 在函数开始的地方插入一个list,即
result = [] - 将每一个
yield表达式替换为result.append(expr) - 在函数底部插入:
return result - 这样就没有
yield啦,就好理解啦。