【问题标题】:Why does this give [None]*5? [duplicate]为什么这会给出 [None]*5? [复制]
【发布时间】:2019-08-07 21:09:59
【问题描述】:

正在运行

[print(n) for n in range(5)]

它给了

0
1
2
3
4
[None, None, None, None, None]

【问题讨论】:

标签: python list-comprehension


【解决方案1】:

print() 不返回任何内容。所以,当你打电话 [print(n) for n in range(5)],它打印了n 5 次,因为它创建了一个由 5 个Nones 组成的数组

【讨论】:

    【解决方案2】:

    print(n) 返回 None 因此列表推导的结果列表将为 [None]*5

    【讨论】:

      【解决方案3】:

      列表推导有效地做到了这一点:

      L = []
      for n in range(5):
          r = print(n)
          L.append(r)
      print(L)
      

      print(...) 具有向屏幕显示参数的副作用,但返回值为None。这就是创建Nones 列表的原因。但是,当您在 shell 中运行它时,您要求查看 list-comp'd 列表...这是五个 Nones

      【讨论】:

        【解决方案4】:

        print 不返回它的参数;它将它写入用于标准输出的文件句柄并返回None。预期列表由[n for n in range(5)] 生成。

        交互式解释器有点混淆了这个问题,因为它们总是在评估表达式后将表达式的值打印到标准输出。在您的示例中,标准输出通过对 print 的调用的评估写入 0 到 4,然后解释器本身也将结果列表的字符串表示形式打印到标准输出。如果您将相同的代码放在一个文件中并交互式解释器之外运行,您将只看到前 5 行,但看不到结果列表。

        【讨论】:

          猜你喜欢
          • 2020-07-18
          • 1970-01-01
          • 2020-12-23
          • 2019-04-17
          • 2022-11-30
          • 1970-01-01
          • 1970-01-01
          • 2014-08-31
          • 2021-04-06
          相关资源
          最近更新 更多