如何正确定义和使用Python生成器

2024-04-20 05:05:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我想从一个一次输出一个元素的列表中定义一个生成器,然后以一种适当的方式使用这个生成器对象。在

a = ["Hello", "world", "!"]
b = (x for x in a)
c = next(b, None)
while c != None:
    print c,
    c = next(b, None)

这里的while方法有什么错误或可以改进的吗?有没有办法避免在循环之前分配“c”?在

谢谢!在


Tags: 对象方法innone元素hello列表for
2条回答

为什么要使用while循环?在Python中,for循环绝对是为此而设计的:

a = ["Hello", "world", "!"]
b = (x for x in a)
for c in b:
    print c,

如果您因为任何原因而被困在while实现中,那么您当前的实现可能是您能做的最好的,但是它有点笨拙,您不认为吗?在

澄清:您的意思是生成器表达式而不是生成器后者是一个函数定义,至少包含一个yield语句/表达式。在

同意前面的海报。。。几乎所有的事情都应该使用for循环。我很少使用while循环,这些循环被降级到运行无限循环的简单计数器或服务器上。:-)

您也可以将genexp放在与for循环相同的行上。。。在

a = ["Hello", "world", "!"]
for c in (x for x in a):
    print c,

…因为genexp不能被重用。然而,它看起来不那么可读。而且,这也违背了本练习的目的。为什么不迭代a本身呢?在

^{pr2}$

你已经用光了内存去做这个列表;为什么要创建一个genexp而不是nec呢?在

相关问题 更多 >