You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Python列表推导式最终会输出包含None的列表?

为什么[print(i) for i in range(3)]会输出0、1、2后出现[None, None, None]?

嗨,这个问题得拆成两个核心点来理解,咱们一步步说:

  • 第一:print()的行为决定了前三个输出
    列表推导式会循环遍历range(3)里的每个元素,每次迭代都会调用print(i)。print()函数的本职工作就是把传入的值输出到控制台,所以你会依次看到0、1、2被打印出来——这部分是print在执行它的输出功能。

  • 第二:print()的返回值+交互式命令行的特性,导致了最后的[None, None, None]
    要注意:print()函数本身是没有有效返回值的,它的返回值固定是None。你可以自己在命令行验证:

    >>> x = print(1)
    1
    >>> x
    None
    

    所以列表推导式在循环时,会把每次print(i)的返回值(也就是None)收集起来,最终生成一个包含三个None的列表[None, None, None]。
    而Python的交互式命令行有个特性:如果你执行的是一个表达式(不是赋值语句、单纯的函数调用这类),它会自动把这个表达式的结果打印出来。这里的列表推导式就是一个表达式,它的结果就是这个三个None的列表,所以最后会把这个列表也输出展示。

换个例子对比你就更清楚了:如果把print(i)换成有实际返回值的操作,比如[i*2 for i in range(3)],这时候控制台只会输出[0, 2, 4]——因为没有print的额外输出,而且列表推导式的结果就是这个包含计算值的列表,被命令行自动打印出来。

内容的提问来源于stack exchange,提问作者Vikas Zingade

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:09:47