包含yield语句的函数会被编译为生成器,当函数被调用时返回一个生成器对象,改对象实现了迭代器接口
不像一般的函数会生成值后退出,生成器函数在生成值后会自动挂起并暂停他们的执行和状态,他的本地变量将保存状态信息,这些信息在函数恢复时将再度有效
def yi(n):
for i in range(n):
yield i
for i in yi(10):
print(i) # 0 1 2 3 4 ... 9
用途:
解决内存问题
def get_primes(start):
for element in magical_infinite_range(start):
if is_prime(element):
return element
此时当range无限大时会产生内存溢出的问题,此时可以通过生成器的方式解决
def get_primes(number):
while True:
if is_prime(number):
yield number
number += 1