暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Python语言print函数的file参数和flush参数

语和言 2022-03-12
2507

一、缘起

Python语言的print函数有四个参数:sep、end、file和flush,给学生上课的时候,告诉学生初学者先记住前两个参数即可。
这里把后两个参数的用法简单介绍一下。

二、环境


Win 10 中文专业版64位 + Python 3.65 64位



三、print函数参数介绍 


print函数的参数如下:

print(value1, value2, ..., 

      sep='',

      end='\n',

      file=sys.stdout,

      flush=False)

 

说明:  

1print()函数可以输出一个值,也可以同时输出多个值,如果输出多个值,这多个值之间用半角逗号隔开;

2sep参数指定输出的多个值之间的间隔符,如不指定,则默认间隔符是一个半角空格;

3end参数指定输出所有的值之后再输出什么符号,如不指定,则默认输出一个换行符;

4file参数指明输出到文件还是到屏幕,默认是输出到屏幕;

5flush参数指明是否立即将输出缓冲区的内容全部输出。



四、print函数的file参数用法示例 


一般情况下,用print函数输出的时候,不必管file参数,我们输出的内容会自动输出到屏幕。例如:


    print("春眠不觉晓,\n处处闻啼鸟。\n夜来风雨声,\n花落知多少。")


    上述代码会在屏幕上输出如下四行内容:


    春眠不觉晓,

    处处闻啼鸟。

    夜来风雨声,

    花落知多少。


    如果我们不想让它输出到屏幕,而是输出到文件,这时候file参数就派上用场了(当然,不用print函数也能输出到文件,这个问题不在本文所讨论的范围内)。



    上面的代码在运行后,会生成一个文本文件result.txt,里面有四行内容,就是前面的代码往屏幕上输出的内容。
    如果我们把上面代码中的 print(s, file=fpw) 改为 print(s, file=None),或者改为 print(s),则输出内容又回到屏幕上。
    其实,我们可以利用print函数的file参数写一个输出函数,根据需要随时决定把输出内容输出到屏幕还是文件。


    上面的代码运行后,会把字符串"春眠不觉晓,\n处处闻啼鸟。"输出到文件“result.txt”当中,把字符串"夜来风雨声,\n花落知多少。"输出到屏幕上。


    五、print函数的flush参数用法示例 


    使用print函数输出内容时,如果不指定flush参数的值,则认为该参数的默认值是False,它表示要把输出的内容暂时保存在输出缓冲区中,等攒够一定数量再一起输出;如果我们设置参数值为True,则立即把输出缓冲区的内容全部输出。

    为了说明这种现象,我们举一个例子,看下面的程序代码。



    我们本来希望这段代码执行后,会输出一句诗,然后每等待5秒,再输出下一句诗。事实上是什么样的呢?

    实际的执行结果是:先等待20秒,然后一下子在屏幕上显示“春眠不觉晓,处处闻啼鸟。夜来风雨声,花落知多少。”这些内容。

    这是为什么呢?是因为上述代码中的print函数的flush参数没有指定,所以flush参数取的是默认值False,因此,程序中用print函数输出的每一行内容并没有立即输出到屏幕,而是暂时保存在输出缓冲区当中,等到最后把输出缓冲区中保存的尚未输出的内容一起输出到屏幕。

    如果我们希望程序在每输出一句诗之后隔5秒再输出下一句,那么,我们就需要将flush参数的值设定为True。



    在上面的代码中,因为我们给每一个print函数指定flush参数为True,所以它要输出的内容不会暂时保存在输出缓冲区中,而是立即从输出缓冲区把内容输出到屏幕,这样,我们看到的效果就是每输出一句诗之后间隔5秒再输出下一句。

    修改上述代码如下:



    修改后代码的运行效果是:运行后5秒输出“春眠不觉晓,处处闻啼鸟。”,再过5秒输出“夜来风雨声,”,再过5秒输出“花落知多少。”。原因是第一句输出内容暂时存在了输出缓冲区,等5秒之后第二句进入输出缓冲区,因为指定了print函数的flush参数的值为True,所以会把输出缓冲区中尚未输出的两句内容同时输出到屏幕。


    需要注意的是,如果print(的内容里面有换行符,或者end参数的值为换行符,则flush参数貌似就失去了作用,输出内容不会在缓冲区暂存,而是直接输出。
    下面两段代码都是输出一句诗之后每隔5秒再输出一句诗。




    六、后记


    欢迎指出本文的不足之处,欢迎就本文的相关问题跟作者进行交流,如需联系作者,请发邮件到 tbv_me@163.com

    文章转载自语和言,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

    评论