为何Python中回车符\r会自动刷新print函数输出?
为什么Python中print用
\r作为end参数会自动刷新输出? 这本质上和Python本身关系不大,而是终端/控制台的行缓冲行为导致的。
大多数终端默认采用行缓冲策略:当输出内容中出现换行符\n时,会立即刷新缓冲区。而回车符\r(光标回到行首)在很多终端实现中,会被视为需要即时更新显示的控制字符,因此也会触发缓冲区刷新——毕竟要看到光标回到行首后覆盖原有内容的效果,终端必须立刻输出缓冲区内容才能实现这个交互。
而像'test'这类普通字符串作为end参数时,既不是换行符也不是终端认为需要即时响应的控制字符,所以会一直攒在缓冲区里,直到缓冲区满、程序结束,或者手动调用flush=True才会输出。
哪些end参数值会触发自动刷新?
- 换行符
\n:所有行缓冲终端都会触发刷新 - 回车符
\r:绝大多数终端会触发刷新(需即时更新光标位置与显示内容) - 部分终端控制字符(比如
\b退格符):部分终端会触发刷新,原理和\r类似,都是需要即时调整显示状态
如果想强制刷新输出,不管end参数是什么,都可以直接设置print的flush=True参数,示例代码:
import time for i in range(1, 5): print(i, end='test', flush=True) time.sleep(1)
这样每一次循环都会立刻输出内容,无需等待缓冲区触发刷新。
内容的提问来源于stack exchange,提问作者zeyad
相关产品推荐
相关产品推荐

