分享

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

 xiaoyimin 2019-09-24

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

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

比如

import timefor i in range(5): print(i) time.sleep(1)
  • 1
  • 2
  • 3
  • 4

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

01234
  • 1
  • 2
  • 3
  • 4
  • 5

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

你一定会想

import timefor i in range(5): print(i, end= '') time.sleep(1)
  • 1
  • 2
  • 3
  • 4

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

这是为什么呢?

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

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

import timeimport sysfor i in range(5):	print(i, end= '')	time.sleep(1)	sys.stdout.flush()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

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

import timeimport sysfor i in range(5): print(i, end= '', flush = True) time.sleep(1)
  • 1
  • 2
  • 3
  • 4
  • 5

这样也是一样的

print函数是默认自动换行的,这样会每次自动刷新缓存区,将输入内容打印出来一旦,你更改了这个条件,而且想要实时输出,记得要刷新缓冲区
  • 1
  • 2

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多