Python中yield学习
一个带有 yield 的函数就是一个 generator,执行到一个 yield 语句就会中断,并返回一个迭代值,下次执行时从 yield 的下一个语句继续执行。看起来就好像一个函数在正常执行的过程中被 yield 中断了数次,每次中断都会通过 yield 返回当前的迭代值。不少人就会疑惑,要你何用,麻烦了。
这时我们就要存在即合理的道理,yield的存在是在大型开发体现他的价值,其特点就是就是节省内存。具体分析如下:
def fab(max):
n, a, b = 0, 0, 1
L = []
while n < max:
L.append(b)
a, b = b, a + b
n = n + 1
return L
for n in fab(5):
print n
list会随着max的增大而增大,这样的代码如果运行在大的项目中,很有可能占用太多内存,而yield的出现,既不要预先申请一个合理的内存空间,他可以执行一次返回,然后接着上次执行的地再次执行,有没有发现每次执行只返回一个值,显然比返回整个list要节省内存。只要在写的函数加入yield,轻松搞定。
def fab(max):
n, a, b = 0, 0, 1
while n < max:
yield b # 使用 yield
# print b
a, b = b, a + b
n = n + 1
for n in fab(5):
print n