如何打印发电机的内容?

che*_*cuc 1 python generator

N = [1, 2, 3]
print(n for n in N)
Run Code Online (Sandbox Code Playgroud)

结果:

<generator object <genexpr> at 0x000000000108E780>
Run Code Online (Sandbox Code Playgroud)

为什么这段代码无法打印:

1
2
3
Run Code Online (Sandbox Code Playgroud)

但是代码:

sum(n for n in N) 
Run Code Online (Sandbox Code Playgroud)

可以总结N中的所有数字.

你能告诉我为什么sum()可以工作但print()faild?

Szy*_*mon 9

这是因为你将一个生成器传递给一个函数,这就是__repr__这个生成器返回的方法.如果要打印它将生成的内容,您可以使用:

print(*N, sep='\n') # * will unpack the list
Run Code Online (Sandbox Code Playgroud)

要么

print(*(n for n in N), sep='\n') # Again, unpacks values
Run Code Online (Sandbox Code Playgroud)

要么

print('\n'.join(map(str, n for n in N)))
Run Code Online (Sandbox Code Playgroud)

或者如果你喜欢理解:

[print(n) for n in N]
Run Code Online (Sandbox Code Playgroud)

您必须知道最后一个方法构造一个填充的列表None.