如何打印发电机的内容?

时间:2017-06-18 14:29:05

标签: python generator

Reference

结果:

N = [1, 2, 3]
print(n for n in N)

为什么此代码无法打印:

<generator object <genexpr> at 0x000000000108E780>

然而代码:

1
2
3

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

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

4 个答案:

答案 0 :(得分:7)

这是因为您将生成器传递给函数,并且该生成器返回的__repr__方法是什么。如果要打印它将生成的内容,可以使用:

print(*N, sep='\n') # * will unpack the list

print(*(n for n in N), sep='\n') # Again, unpacks values

print('\n'.join(map(str, n for n in N)))

或者如果你喜欢理解:

[print(n) for n in N]

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

答案 1 :(得分:1)

您实际上是在打印生成器对象表示

如果您想在一行上,请尝试打印列表

public ConsumerRecords<K,V> poll(long timeout)

这只是print([n for n in N])

如果您想要一个行分隔的字符串,请打印

print(N)

或者写一个常规循环,不要微观优化代码行

答案 2 :(得分:1)

如果您不想将其作为列表投射,可以尝试:

print(*(n for n in N))

请参阅:https://docs.python.org/3/tutorial/controlflow.html#tut-unpacking-arguments

答案 3 :(得分:-1)

发电机…

def  genfun():
    yield ‘A’
    yield ‘B’
    yield ‘C’
g=genfun()
print(next(g))= it will print 0th index .
print(next(g))= it will print 1st index.
print(next(g))= it will print 2nd index.
print(next(g))= it will print 3rd index But here in this case it will give Error as 3rd element is not there 
So , prevent from this error we will use for loop as below .
 for  i in g :
    print(i)