Python3 不换行输出为什么不是即时输出?

当我们要将数据以一行的形式输出到屏幕时,一般会这样做,将 print 函数的 end 参数改为其他值

>>> import time
>>> for i in range(5):
...     print(i, end=" ")
...     time.sleep(1)
... 
0 1 2 3 4 >>>

但是,这样会出现一个问题。就是需要等到 for 执行结束完成的时候才将数据输出,不是即时输出的

接下来将 sys.stdout.flush() 加到循环中

>>> import sys
>>> import time
>>> for i in range(5):
...     print(i, end=" ")
...     sys.stdout.flush()
...     time.sleep(1)
... 
0 1 2 3 4 >>>

这次结果就正常了,所以,sys.stdout.flush() 的作用是刷新输出

那为什么需要刷新输出呢?我们使用 print 正常输出的时候就没有出现这样的问题,而把所有的数据以一行的形式输出就出现这样问题了呢?

后经研究发现,使用 print 输出时会先把数据放到缓冲区里,只有当程序结束时或缓冲区遇到 \n 时,才将数据显示到屏幕,并清空缓冲区,而 print 函数默认会有 \n。

print(*objects, sep=' ', end='\n', file=sys.stdout)

除了上述两种内置机制,我们还可以手动释放缓冲区。在需要输出的地方之后加上 sys.stdout.flush(), 即:刷新输出。这样就能在程序没执行完或缓冲区没遇到 \n 时,将缓存中的数据显示出来,也可以主动加上 \n 来释放缓冲区。

>>> import sys
>>> import time
>>> for i in range(5):
...     print(i, end=" ")
...     print(end="\n")
...     time.sleep(1)
... 
0 
1 
2 
3 
4
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值