#深入理解# python 的 print() 函数 在当前行打印 不换行

1. 参数介绍

python中的print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)函数的参数说明如下:

参数说明
objects复数,表示可以一次输出多个对象。输出多个对象时,需要用 , 分隔。
sep用来间隔多个对象,默认值是一个空格。
end用来设定以什么结尾。默认值是换行符 \n,我们可以换成其他字符串。
file要写入的文件对象。
flush输出是否被缓存通常决定于 file,但如果 flush 关键字参数为 True,流会被强制刷新。

这里着重解释一下 end 和 flush 参数:

  1. 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 = Trueprint("***",end = '\r',flush = True)

这里之所以打印 len(str1)*2 长度的空格是因为len是计算的是字符串字符的个数,而不同字符所占用的命令行宽度不同(1~2个宽度),因此使用 en(str1)*2 宽度的空格就能保证完全覆盖str1打印的内容。

  1. 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时它会立即把内容刷新存到文件中。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

energy_百分百

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值