Jupyter中使用含print的列表推导式出现意外None数组问题
问题现象原因解析
本质:列表推导式的返回值
print()函数执行时会输出内容,但它本身的返回值是None。所以[print(i) for i in A]这个列表推导式,在执行时会先逐个打印1-5,同时生成一个由5个None组成的列表。
普通Python脚本与Jupyter的执行差异
- 在普通Python文件中,这个生成的
[None, None, None, None, None]列表只是被创建出来,但没有被显式触发输出(比如没有用print()去打印它),所以你只会看到print(i)输出的1到5。 - 在VS Code的Jupyter环境中,单元格会自动输出最后一个表达式的返回值。当列表推导式是单元格最后一行代码时,Jupyter会把这个
None组成的列表自动打印出来,所以你会看到额外的[None,...]。
为什么加print("test")后None数组消失
当你在列表推导式后添加print("test"),此时单元格的最后一个表达式变成了print("test"),它的返回值同样是None,但Jupyter的默认行为是不会自动输出单个的None值(避免无意义的冗余输出)。而之前的列表推导式不再是最后一个表达式,所以它的返回值不会被自动输出,你就只会看到1-5和"test"的输出。
内容的提问来源于stack exchange,提问作者Krzyp
相关产品推荐
相关产品推荐

