Python中打印函数作为print参数时输出异常及None来源求解
执行逻辑说明
Python调用任意函数时,会先完成所有参数的求值计算,再把计算得到的参数值传入函数执行,你写的print('When num is 5 :', my_print(5))执行顺序如下:
- 先计算第一个参数的值:就是固定字符串
'When num is 5 :',无额外输出。 - 再计算第二个参数的值:需要执行
my_print(5):- 函数内部循环触发5次
print(i, end=' '),直接向标准输出打印0 1 2 3 4 - 该函数没有定义
return语句,默认返回值为None
- 函数内部循环触发5次
- 现在两个参数的值都计算完成,分别是
'When num is 5 :'和None,才会调用外层的print函数,把两个参数按默认分隔符(空格)拼接后打印,输出When num is 5 : None
两部分输出按执行顺序拼接,最终得到你看到的实际结果。
None的产生原因
Python中所有函数都有返回值,如果你没有显式写return语句指定返回值,函数默认会返回None。你将my_print(5)作为参数传入print时,print会把这个函数调用的返回值(也就是None)当做普通内容打印出来,就出现了末尾的None。
修复方案
如果要达到你的预期输出,有两种常见写法:
- 方案1:分开两次打印,不要把带内部打印逻辑的函数放到外层
print的参数里
def my_print(num: int) -> None: for i in range(num): print(i, end=' ') if __name__ == '__main__': print('When num is 5 :', end=' ') my_print(5)
- 方案2:修改
my_print逻辑,改为返回拼接好的字符串而非内部直接打印
def my_print(num: int) -> str: return ' '.join(map(str, range(num))) if __name__ == '__main__': print('When num is 5 :', my_print(5))
内容的提问来源于stack exchange,提问作者Kai Li
相关产品推荐
相关产品推荐

