print() 的 \`flush\` 有什么作用?

新手上路,请多包涵

print() 函数 flush 有一个布尔可选参数,默认为 False。

文档上说是强制刷流。

我不明白冲洗的概念。什么在这里冲洗?什么是流冲洗?

原文由 Santosh Kumar 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 691
2 个回答

通常输出到文件或缓冲控制台,至少在打印换行符之前输出文本。刷新确保缓冲的任何输出都到达目的地。

我确实使用它,例如,当我在获取输入之前发出像 Do you want to continue (Y/n): 这样的用户提示时。

这可以模拟(在 Ubuntu 12.4 上使用 Python 2.7):

 from __future__ import print_function

import sys
from time import sleep

fp = sys.stdout
print('Do you want to continue (Y/n): ', end='')
# fp.flush()
sleep(5)

如果你运行这个,你会看到提示字符串直到睡眠结束和程序退出才出现。如果你用 flush 取消注释行,你会看到提示,然后必须等待 5 秒让程序完成

原文由 Anthon 发布,翻译遵循 CC BY-SA 3.0 许可协议

这里有几件事需要理解。一个是缓冲 I/O 和非缓冲 I/O 之间的区别。这个概念相当简单——对于缓冲 I/O,有一个保留的内部缓冲区。只有当该缓冲区已满(或发生其他事件,例如到达换行符)时,输出才会“刷新”。使用无缓冲 I/O,每当调用输出某些内容时,它都会执行此操作,一次 1 个字符。

大多数 I/O 函数都属于缓冲类别,主要是出于性能原因:一次写入块要快得多(所有 I/O 函数最终都会归结为某些描述的系统调用,这是昂贵的。)

flush 允许您手动选择何时写入此内部缓冲区 - 调用 flush 将在缓冲区中写入任何字符。通常,这不是必需的,因为流会自行处理。但是,在某些情况下,您可能希望在继续之前确保已输出某些内容 - 这就是您需要调用 flush() 的地方。

原文由 Yuushi 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题