gpt4 book ai didi

python - 跨函数调用维护生成器对象

转载 作者:太空宇宙 更新时间:2023-11-03 16:10:54 27 4
gpt4 key购买 nike

让我用以下代码突出显示问题:

def genny():
yield 1
yield 2
yield 3


def middleman(input_gen=None):
if input_gen:
gen = input_gen
else:
gen = genny()
return [next(gen), gen]

if __name__ == '__main__':
pro_list = middleman()
pro_value = pro_list[0]
print pro_value
pro_gen_id = pro_list[1]
for i in range(2):
pro_list = middleman(pro_gen_id)
pro_value = pro_list[0]
print pro_value

我的限制是 middleman() 函数不能是生成器,但我需要显示生成器 genny() 中的所有值。我通过将生成器对象传递回 main() 函数,然后再次将其发送回 middleman() 来完成此操作。这是执行此操作的最佳方法还是有更好的方法?

最佳答案

如果没有您的示例(可以理解为一个玩具示例)所指的更大上下文,就很难说。

一般来说,从一个函数返回多个值是完全可以的(尽管是 tuple or namedtuple are a bit more common )。

但是,在您的具体情况下,middelman 函数只是 next 生成器(接收的或内部构造的),然后返回该值和生成器。我认为仅让中间人创建或返回生成器并让客户端代码执行下一步没有任何优势。以下代码与您的代码等效(请参阅 ideone ):

def genny():
yield 1
yield 2
yield 3

def middleman(input_gen=None):
return genny() if input_gen is None else input_gen

if __name__ == '__main__':
pro = middleman()
for e in pro:
pro = middleman(pro)
print e

客观上它更短,对我来说也更清晰。

关于python - 跨函数调用维护生成器对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39318953/

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