为什么 print with end='' 直到新行才出现?

Leo*_*Leo 6 python newline python-3.x

我一直在 python 3.9 中编写一个程序,并在获得以下代码后:

#Print 3 dots at the interval shown
def dots(t):
    t *= 3
    sleep(t)
    print('.', end='')
    sleep(t)
    print('.', end='')
    sleep(t)
    print('.')
Run Code Online (Sandbox Code Playgroud)

这称之为:

# These are completely aesthetic
sleep(0.25)
print("Defining Functions", end='')
dots(0.4)
Run Code Online (Sandbox Code Playgroud)

我预计程序会Defining Functions在 1.2 秒后打印 3 次,.在末尾添加一个点( )。真正发生的是 3.85 秒后,它用点 ( Defining Functions...) 打印了整个内容。因此,在添加新行(第三个点)之前它不会打印任何内容。

抱歉,如果有点乱,我不知道如何很好地提出这些问题

Dan*_*iel 12

Python 将输出缓冲到 stdout。这是因为一次写入较大的文本片段效率更高(系统调用更少)。

默认情况下,如果 stdout 连接到终端,则输出将是行缓冲的。因此,打印换行符会刷新缓冲区,您会立即看到输出。如果 stdout 被重定向到管道或文件,Python 会更加积极地进行缓冲,并且仅当缓冲区已满时才不会刷新换行符。

为了避免这个问题,请在睡眠之前显式刷新缓冲区:

 print('.', end='', flush=True)
Run Code Online (Sandbox Code Playgroud)