gpt4 book ai didi

python - 从函数返回生成器

转载 作者:太空狗 更新时间:2023-10-30 00:56:25 24 4
gpt4 key购买 nike

我正在慢慢开始关注 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

为什么我不能从函数返回生成器?

最佳答案

生成器函数仅在调用时返回生成器。调用 fn 创建生成器对象:

return fn()

或者调用返回的对象:

g = give_gen(3)()

确实调用了gen();如果您只是 gen 而不调用它,您就会引用该函数。

关于python - 从函数返回生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18252550/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com