Python单行for in列表推导搭配print输出异常的原因是什么
问题解答
1. 为什么列表推导生成的列表中所有元素都是None?
Python中print()函数的核心作用是向标准输出打印内容,它本身没有有意义的返回值,设计上就是返回None。你写的列表推导[print(i) for i in names]的逻辑是:遍历names的每一个元素,执行print(i),并将print(i)的返回值收集为列表的元素,所以最终生成的列表所有元素都是None。
2. 为什么各个名字会输出在names: 所在行的上方?
Python执行函数调用时,会先计算所有入参的值,再执行函数本身的逻辑。你外层的print('names: ', [print(i) for i in names])有两个入参:第一个是字符串'names: ',第二个是列表推导表达式。代码运行时会先把第二个入参的列表推导完全执行完毕,执行列表推导的过程中会多次调用print(i),提前把各个名字打印出来;等列表推导计算完成得到全是None的列表后,才会执行外层的print语句,打印names: 和对应的列表,所以名字都出现在了目标行的上方。
符合你期望的实现代码
names = ['ali', 'parham', 'hasan', 'farhad'] print('names:', ', '.join(names))
运行后输出正好是你需要的:
names: ali, parham, hasan, farhad
内容的提问来源于stack exchange,提问作者PaRHaM_PwP
相关产品推荐
相关产品推荐

