Alo*_*dal 5 python function generator
我正慢慢地围绕Python生成器.
虽然现在不是现实生活中的问题,但我仍然想知道为什么我不能从函数返回一个生成器.
当我用函数定义函数时yield,它充当生成器.但是如果我在另一个函数中定义并尝试返回它,我得到一个普通函数,即不是带next方法的生成器.
换句话说,为什么give_gen()下面的代码中的方法不起作用?
#!/usr/bin/python
import time
def gen(d):
n = 0
while True:
n = n + d
time.sleep(0.5)
yield n
def give_gen(d):
def fn():
n = 0
while True:
n = n + d
time.sleep(0.5)
yield n
return fn
if __name__ == '__main__':
g = give_gen(3) # does not work
g = gen(3) # works well
while True:
print g.next()
# AttributeError: 'function' object has no attribute 'next'
# in case of give_gen
Run Code Online (Sandbox Code Playgroud)
为什么我不能从函数返回一个生成器?
生成器函数仅在调用时返回生成器.调用fn创建生成器对象:
return fn()
Run Code Online (Sandbox Code Playgroud)
或者调用返回的对象:
g = give_gen(3)()
Run Code Online (Sandbox Code Playgroud)
你没有打电话gen(); 有了你提到只是 gen不调用它,你就必须给函数的引用.