flush是缓存区的意思,你的输入输出一般并不会直接输入输出,而是存在一个叫做缓存区的地方
以标准输入输出中的先来举例,对于标准输入输出中的显示,在你键盘输入内容之后,内容并不会立即显示到显示器,而会存储到缓存区中,除非
- flush的缓存已经满了,它会自动输出
- 遇到换行符
- 程序被终止
比如
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函数是默认自动换行的,这样会每次自动刷新缓存区,将输入内容打印出来
一旦,你更改了这个条件,而且想要实时输出,记得要刷新缓冲区