【问题标题】:Python, For loop, Python loopsPython, For 循环, Python 循环
【发布时间】:2020-05-25 17:01:02
【问题描述】:

我在 python jupyter notebook 中错误地打印了以下短代码:

[print(i) for i in range(0,3)]
Output>
0
1
2
[None, None, None, None, None, None, None, None, None, None]

我不明白为什么它最后是一个无的打印列表? 请向我解释一下。

【问题讨论】:

标签: python-3.x list loops for-loop nonetype


【解决方案1】:

你跑了

[print(i) for i in range(0, 10)]

它从print 捕获了None 返回值,十次。

为避免这种情况,请考虑在没有列表理解的情况下运行它:

for i in range(10):
    print(i)

【讨论】:

    【解决方案2】:

    您在其中运行代码的 Python REPL,输出您给它的代码的评估结果。

    所以:

    如果我给它一个列表理解,例如:

    [i for i in range(0,3)]
    

    即使我不会显式打印它,python REPL 也会将评估结果打印为

    [0,1,2]
    

    现在您会感到困惑,因为您将 print(i) 函数与列表理解一起使用。

    所以print(i) 打印了i,但它的返回值(即None)也用于通过列表理解创建列表:

    [print(i) for i in range(0,3)]
    

    所以输出是print(i)的输出加上评估列表的REPL输出,这是None的列表

    0
    1
    2
    [None, None, None]
    

    换句话说,您创建了None 的列表,但在此过程中您还打印了一些值。如果您只想遍历一些值并打印 then (而不是创建列表)然后执行:

    for i in range(0, 3): print(i)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-19
      • 2021-10-06
      • 1970-01-01
      • 2017-11-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多