N = [1, 2, 3]
print(n for n in N)
结果:
<generator object <genexpr> at 0x000000000108E780>
为什么没有打印出来?:
1
2
3
但是代码:
sum(n for n in N)
会对N中的所有数求和。
你能告诉我为什么 sum() 有效但 print() 失败吗?
请您参考如下方法:
这是因为您将一个生成器传递给了一个函数,这就是该生成器的 __repr__ 方法返回的内容。如果你想打印它生成的内容,你可以使用:
print(*N, sep='\n') # * will unpack the generator
或
print('\n'.join(map(str, N)))
请注意,一旦您检索生成器的输出以打印它,生成器已耗尽 - 再次尝试对其进行迭代将不会生成任何项目。
