谁能解释一下这些例子中的生成器是如何工作
在这个例子中来自http://www.dabeaz.com/generators/index.html
wwwlog = open("access-log")
bytecolumn = (line.rsplit(None,1)[1] for line in wwwlog)
bytes = (int(x) for x in bytecolumn if x != '-')
print "Total", sum(bytes)
Run Code Online (Sandbox Code Playgroud)
在这个例子中(x*x代表范围内的x(1,100000000))
我有这个疑问的原因是这个片段:
def foo():
for each in range(1,100000):
yield each
a = foo()
# Here range is not evaluated until generator is run or just
# before first yield is hit which is expected.
a=(x for x in range(1,100000))
# I thought also does exact thing as that function and it i is a
# syntactic sugar for a=foo() which also yields a generator object.
Run Code Online (Sandbox Code Playgroud)
使用生成器超过列表或场景更有实际可行吗?
sum).bytes = (int(x) for x in (line.rsplit(None,1)[1] for line in wwwlog) if x != '-')range返回一个列表,你需要xrange生成一个类似生成器的对象.range表现得像Python 2 xrange.同样的事情发生在像map和的其他功能上filter.生成器的主要优点是它们不会立即存储它们的全部内容.它们的主要缺点是你只能迭代它们一次.