让我强调一下以下代码的问题:
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()中的所有值。为此,我将generator对象传回main()函数,然后再次将其传回middleman()。这是最好的方法还是有更好的方法?你知道吗
如果没有你的例子(可以理解为一个玩具例子)所指的更大的上下文,这就有点难说了。你知道吗
一般来说,从一个函数返回多个值是非常好的(尽管是tuple or namedtuple are a bit more common)。你知道吗
但是,在您的特定情况下,
middelman
函数只是next
的生成器(接收的或内部构造的),然后返回这个值和生成器。我认为让middleman
创建或返回生成器,让客户机代码执行next
没有任何好处。以下代码与您的代码等效(请参见ideone):客观上它更短,对我来说也更清晰。你知道吗
相关问题 更多 >
编程相关推荐