如何正确地定义和使用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'赋值?
谢谢!
2 个回答
3
澄清一下:你说的是 生成器表达式,而不是 生成器 -- 后者是一个函数定义,里面至少有一个 yield
语句。
我同意之前的说法……你几乎应该用 for
循环来处理所有事情。我很少用 while
循环,通常它们只用来做简单的计数或者让服务器一直运行下去。:-)
你也可以把生成器表达式放在和 for
循环同一行……
a = ["Hello", "world", "!"]
for c in (x for x in a):
print c,
……因为生成器表达式不能被重复使用。不过,这样写起来不太容易读。而且,这样做也违背了这个练习的目的。为什么不直接遍历列表本身呢?
for c in ["Hello", "world", "!"]:
print c,
你已经用内存创建了列表;那为什么还要创建一个生成器表达式呢?这并不是必要的。
7
为什么要使用 while
循环呢?在 Python 中, for
循环其实是专门为这个设计的:
a = ["Hello", "world", "!"]
b = (x for x in a)
for c in b:
print c,
如果你在某种情况下被迫使用 while
循环,你现在的做法可能是你能做到的最好选择,但听起来有点笨重,是不是?