当我们要将数据以一行的形式输出到屏幕时,一般会这样做,将 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
总结 以上是内存溢出为你收集整理的Python3 不换行输出为什么不是即时输出?全部内容,希望文章能够帮你解决Python3 不换行输出为什么不是即时输出?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)