为何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
相关产品推荐
相关产品推荐

