一、缘起
二、环境
print函数的参数如下:
print(value1, value2, ...,
sep='',
end='\n',
file=sys.stdout,
flush=False)
说明:
1、print()函数可以输出一个值,也可以同时输出多个值,如果输出多个值,这多个值之间用半角逗号隔开;
2、sep参数指定输出的多个值之间的间隔符,如不指定,则默认间隔符是一个半角空格;
3、end参数指定输出所有的值之后再输出什么符号,如不指定,则默认输出一个换行符;
4、file参数指明输出到文件还是到屏幕,默认是输出到屏幕;
5、flush参数指明是否立即将输出缓冲区的内容全部输出。
一般情况下,用print函数输出的时候,不必管file参数,我们输出的内容会自动输出到屏幕。例如:
print("春眠不觉晓,\n处处闻啼鸟。\n夜来风雨声,\n花落知多少。")
上述代码会在屏幕上输出如下四行内容:
春眠不觉晓,
处处闻啼鸟。
夜来风雨声,
花落知多少。
如果我们不想让它输出到屏幕,而是输出到文件,这时候file参数就派上用场了(当然,不用print函数也能输出到文件,这个问题不在本文所讨论的范围内)。
使用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,所以会把输出缓冲区中尚未输出的两句内容同时输出到屏幕。