【问题标题】:How to print the content of the generator?如何打印生成器的内容?
【发布时间】: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 迭代参数。

标签: python generator


【解决方案1】:

这是因为您将生成器传递给了一个函数,而这就是该生成器的__repr__ 方法返回的内容。如果你想打印它会产生什么,你可以使用:

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

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

请注意,一旦您检索生成器的输出并打印它,生成器就会用尽 - 尝试再次对其进行迭代将不会产生任何项目。

【讨论】:

  • [print(n) for n in N] 会返回所有 None 的列表,这可能是出乎意料的
  • 谢谢@cricket_007。已编辑。
  • [print(n) for n in N] python shell 中的语法错误
【解决方案2】:

如果您不想将其转换为列表,可以尝试:

print(*(n for n in N))

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

【讨论】:

    【解决方案3】:

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

    如果你想在一行,试着打印一个列表

    print([n for n in N])
    

    这只是print(N)

    如果你想要一个行分隔的字符串,打印出来

    print("\n".join(map(str, N))) 
    

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

    【讨论】:

      【解决方案4】:

      发电机……

      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)
      

      【讨论】:

        猜你喜欢
        • 2018-01-19
        • 2012-06-08
        • 1970-01-01
        • 2011-05-20
        • 2019-08-29
        • 2021-07-04
        • 2014-06-04
        • 2020-09-08
        • 2020-04-13
        相关资源
        最近更新 更多