【python小技巧1】一文讲尽print函数
小倪同学0v0
编辑于 2023年01月05日 15:45
收录于文集
共6篇

print在3.x中是一个内置函数,不需要导入模块。大概率是新手学python接触的第一个函数。(毕竟要 "Hello World!&#​34;)

注意:本文不再讨论现在差不多过时的python2.x

一、定义

先看函数的定义:

代码块
Python
自动换行
复制代码
def print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False):
    pass
复制成功

没错,builtins里只有定义,没有实现,因为那是更底层的事情,你懂的。

再看看存根:

代码块
Python
自动换行
复制代码
def print(
    *values: object, sep: str | None = ..., end: str | None = ..., file: SupportsWrite[str] | None = ..., flush: bool = ...
) -> None: ...
复制成功

很明显:

  1. print可以接受任意个数的“位置参数”,甚至是0个。

  2. 最多可以接受sep、end、file、flush共4个“关键字参数”。

  3. print函数返回值永远是None。

二、参数

  • 位置参数

    这个 *objects 表示把所有位置参数都“吸入”变量 objects 中,而 objects 是一个元组。可以是任意对象。

  • 关键字参数

  1. sep(sep->separator->分隔符):表示用什么字符串来间隔 objects 中的元素。默认为一个空格 ' ' 。必须为Optional[str]

  2. end:表示用什么字符结束输出。默认为一个换行符 '\n' 。如果你想输出完不换行,你可以指定 end='' 。必须为Optional[str]。如果调用 print() 将输出空行

  3. file:表示输出到那个对象。默认为 sys.stdout ,即显示器。必须是一个具有 write(string) 方法的对象或 None 。但由于要打印的参数会被转换为str,因此 print() 不能用于二进制模式的文件对象,如 BytesIO

  4. flush:输出是否被缓存通常决定于 file,但如果 flush 为 True,流会被强制刷新(把缓冲区的数据强行输出,清空缓冲区)。必须为 bool。python3.3新增为 False 时先写入缓存,再写入文件,中途出错可能丢失。为 True 时强制写入文件。简化理解:假期时老师一布置作业,学霸就开始写,没写完就不玩,而学渣要等到开学前一天通宵学习,到上学做不完了,可能还要作业没搞定就交了。用 flush=True 就是学霸了(很不专业,理解意思就行)

三、执行过程

print() 函数的执行过程大致如下:

  1. 对于 objects 中的每一个元素 x,调用 str(x)。注意不是repr(x)

  2. 用 sep 拼接生成的每一个 str(x)

  3. 再在最后加上 end

  4. 向 file 指定的对象输出

至于 % 格式化字符串等,其实不是 print 函数的功能,本文不再提及。

END

cut-off

参考资料:

https://docs.python.org/zh-cn/3.8/library/functions.html

https://www.runoob.com/python3/python-func-print.html

https://blog.csdn.net/weixin_44716687/article/details/105675638

以上内容如有错误,请指出!