python中的关于刷新缓存区flush的问题

flush是缓存区的意思,你的输入输出一般并不会直接输入输出,而是存在一个叫做缓存区的地方
以标准输入输出中的先来举例,对于标准输入输出中的显示,在你键盘输入内容之后,内容并不会立即显示到显示器,而会存储到缓存区中,除非

  1. flush的缓存已经满了,它会自动输出
  2. 遇到换行符
  3. 程序被终止

比如

import time
for i in range(5):
	print(i)
	time.sleep(1)

这时候你会发现输出结果是0,1,2,3,4每隔一s打印一个数,结果如下

0
1
2
3
4

但是我如果想显示01234,这样打印在一行的数字呢?

你一定会想

import time
for i in range(5):
	print(i, end= '')
	time.sleep(1)

但是这样的结果是,在最后结束的时候直接将0,1,2,3,4一起打印,而并不是一个数字接着一个数字出现

这是为什么呢?

因为print输出默认是自动换行的,所以第一个例子就满足了上面所说的第二条,遇到换行符,缓存区自动将存储内容打印到屏幕。而第二种情况设置了end=’’,那么缓存区中一直没有刷新输出,所以直到程序结束的时候才一同刷新出来。

如果你想实时刷新,你可以应用以下代码

import time
import sys
for i in range(5):
	print(i, end= '')
	time.sleep(1)
	sys.stdout.flush()

这样可以显示01234,每隔一秒显示一个数字或者

import time
import sys
for i in range(5):
	print(i, end= '', flush = True)
	time.sleep(1)

这样也是一样的

print函数是默认自动换行的,这样会每次自动刷新缓存区,将输入内容打印出来
一旦,你更改了这个条件,而且想要实时输出,记得要刷新缓冲区
  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值