Python打印语句类型差异及print返回值类型问题解答
Python打印语句相关问题解答
一、不同打印语句/方法的核心区别
- Python 2.x 中的
print是语法级语句:不属于函数,调用不需要加括号,例如直接写print 'hello world'即可输出内容;不支持自定义分隔符、末尾字符、输出流等配置,print(1,2)在该版本中会被识别为打印元组对象(1,2),而非打印两个空格分隔的数字。 - Python 3.x 中的
print()是内置标准函数:必须加括号才能调用,支持传入多个待打印对象,可通过sep参数自定义对象间的分隔符(默认是空格)、end参数自定义打印完成后追加的末尾字符(默认是换行符\n)、file参数指定输出目标流(默认是控制台标准输出流)、flush参数控制是否立即刷新输出缓冲区,是当前Python版本的通用打印实现。 - 其他常见打印相关实现:
sys.stdout.write():标准输出流的底层写入方法,仅支持传入字符串参数,不会自动追加换行,不会自动转换非字符串类型,返回值为实际写入的字符长度,print()本质是对该方法的高层封装。pprint.pprint():标准库pprint提供的美化打印方法,专门针对嵌套列表、字典等复杂结构做自动缩进、换行格式化,输出可读性远高于原生print()。
二、type(print)与type(print("avc"))的返回值差异说明
首先明确两个基础逻辑:
- 不带括号的
print是函数对象本身:Python 3中print是解释器启动时默认加载的内置函数,未加括号触发调用时,它就是一个普通的函数对象,因此type(print)返回built-in function,和type(len)、type(sum)的返回逻辑完全一致。 - 带括号的
print("avc")是函数调用后的返回值:你之前的认知存在偏差——print执行时把传入内容转成str类型,是它完成打印动作的内部处理步骤,这个转换后的字符串会被直接送到输出流打印到控制台,不会作为函数返回值返回。
Python中所有没有显式通过return指定返回值的函数,执行完成后默认返回None,print()函数本身就没有定义返回值,因此print("avc")这个表达式的求值结果就是None,None的类型就是NoneType,这和它内部有没有把内容转成str没有关系。
你可以用简单代码验证这个逻辑:
# 把print的返回值存到变量里 result = print("avc") print(result) # 控制台会输出None,证明print的返回值就是None print(type(result)) # 输出<class 'NoneType'>
控制台能看到打印出的avc是print()函数执行产生的副作用,不是表达式的返回值,自然不会得到str类型的结果。
内容的提问来源于stack exchange,提问作者hal
相关产品推荐
相关产品推荐

