【发布时间】:2017-11-20 19:27:49
【问题描述】:
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() 失败了?
【问题讨论】:
-
您正在创建一个生成器对象并打印该对象的表示。所以这个输出实际上是预期的。你到底想达到什么目的?
-
print函数接受多个参数,并用sep关键字参数指定的字符串分隔每个参数。您可以使用print(*(n for n in N), sep='\n')来产生预期的输出(或更简单地说,print(*N, sep='\n'))。 -
不要将生成器 argument 与类似 Perl 的结构
print(n) for n in N混淆(当然,这不是有效的 Python)。 -
但代码: sum(n for n in N]) 有效。你能告诉我有什么区别吗?
-
print函数调用您传递的所有参数的__str__方法。sum迭代参数。