Python 3中的print()函数只有在for循环执行完毕后才会被执行

3
我想使用for循环在同一行显示一系列数字,这是我所做的:

for i in range(10):
    sleep(1)
    print(i, end=" ")

这段代码本应该在每次循环迭代时依次打印数字(0、1、2、...、10),但是实际上程序会等待循环完毕后一次性打印所有的数字。

我不理解为什么会出现这种情况,有没有人知道是什么原因导致了这种行为呢?谢谢!

1个回答

11

你的stdout是行缓冲的,这意味着它在遇到换行符之前不会显示文本。你需要明确地刷新缓冲区:

for i in range(10):
    sleep(1)
    print(i, end=" ", flush=True)

来自print() 函数文档:

输出是否被缓冲通常由文件确定,但如果flush关键字参数为true,则流将被强制刷新。

并且来自sys.stdout:

当交互时,标准流是行缓冲的。


1
谢谢,这个完美地解决了问题。 - Toni Joe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接