1. 参数介绍
python中的print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)
函数的参数说明如下:
参数 | 说明 |
---|---|
objects | 复数,表示可以一次输出多个对象。输出多个对象时,需要用 , 分隔。 |
sep | 用来间隔多个对象,默认值是一个空格。 |
end | 用来设定以什么结尾。默认值是换行符 \n,我们可以换成其他字符串。 |
file | 要写入的文件对象。 |
flush | 输出是否被缓存通常决定于 file,但如果 flush 关键字参数为 True,流会被强制刷新。 |
这里着重解释一下 end 和 flush 参数:
end
参数默认为\n
这就是为什么我们每次调用 print() 函数时都会在新的一行打印。如果我们将 end设置成""
(end=""
),则多次调用print()函数都会在同一行打印;如果我们将end设置成"\r"
(end="\r"
),则每次调用print()函数不仅会在同一行打印,并且每次都会回到当前行首位打印,并且会覆盖上次打印内容,通过一个例子来说明就很好理解了:
print("aaaaaaaa",end = '\r',flush = True)
print("***",end = '\r',flush = True)
# 输出为:
***
但是通过pyinstaller 打包或运行在服务器上的话 会输出如下结果:
***aaaaaaaaaaaa
这是因为 第二次打印只覆盖了第二次打印同等宽度的内容。因此想要达到上边的效果,首先要使用大于或等于第一次打印内容宽度的空格刷新当前行,代码如下:
str1="aaaaaaaa"
print(str1,end = '\r',flush = True)
print(" "*len(str1)*2,flush = True)
print("***",end = '\r',flush = True)
这里之所以打印 len(str1)*2
长度的空格是因为len是计算的是字符串字符的个数,而不同字符所占用的命令行宽度不同(1~2个宽度),因此使用 en(str1)*2 宽度的空格就能保证完全覆盖str1打印的内容。
flush
参数 ,flush
参数主要是刷新, 默认flush = False
,不刷新,下面通过一个例子说明:
import time
print("Loading",end = "")
for i in range(6):
print(".",end = '')
time.sleep(0.2)
上述例子并不会按0.2秒间隔动态显示“.”,而是等待6*0.2秒后一次性输出6个“…”,这时,想要动态显示“.” 即必须加上flush = True
参数,使控制台实时刷新。类似的,如果 print 到文件 python会将print到f中的内容先存到内存中,当文件对象关闭时才把内容输出到文件中;而当flush = True
时它会立即把内容刷新存到文件中。