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.
总结了所有的数Co你可以告诉我为什么sum()可以工作,但是print()表达式?
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.
总结了所有的数Co你可以告诉我为什么sum()可以工作,但是print()表达式?
这是因为你传递了一个生成器来运行,这就是这个生成器返回的方法。如果你想打印什么会产生,你可以使用:
print(*N, sep='\n') # * will unpack list
或
print(*(n for n in N), sep='\n') # Again, unpacks values
或
print('\n'.join(map(str, n for n in N)))
,或者如果你喜欢comprahensions:
[print(n) for n in N]
你必须意识到最后一个方法的构造cts名单充满了None
。
'[print(n)for n in N]'返回所有None的列表,但这可能是意想不到的 –
Thanks @ cricket_007。编辑。 – Szymon
你是从字面上打印生成对象表示
如果你想在同一行,尝试打印列表
print([n for n in N])
这只是print(N)
如果你想分开串线,打印
print("\n".join(map(str, N)))
或wri TE定期循环,并没有微优化的代码
行。如果你不想投它作为一个清单,你可以尝试:
print(*(n for n in N))
参见:https://docs.python.org/3/tutorial/controlflow.html#tut-unpacking-arguments
您正在创建一个生成器对象并正在打印该对象的表示形式。所以这个输出实际上是预期的。你究竟想达到什么目的? – idjaw
'print'函数接受多个参数,并将每个参数与'sep'关键字参数指定的字符串分开。你可以使用'print(*(n代表n中的n),sep ='\ n')'产生期望的输出(或者更简单地说,print(* N,sep ='\ n')')。 – chepner
不要将生成器*参数*与N'中的n(当然不是Python有效)中类Perl结构'print(n)混淆。 – chepner