print()
函数flush
有一个布尔可选参数,默认为False。
文档说它是强制刷新流。
我不明白潮红的概念。什么在这里冲洗?什么是潮流?
答案 0 :(得分:12)
这里有几点需要了解。一个是缓冲I / O和无缓冲I / O之间的区别。这个概念相当简单 - 对于缓冲I / O,存在一个内部缓冲区。只有当该缓冲区已满(或发生某些其他事件,例如它到达换行符)时,输出才会“刷新”。使用无缓冲的I / O,每当调用输出内容时,它都会执行此操作,一次只能输入1个字符。
大多数I / O函数属于缓冲类别,主要是出于性能原因:一次编写块的速度要快得多(所有I / O函数最终都归结为某些描述的系统调用,这很昂贵。)< / p>
flush
允许您手动选择何时写入内部缓冲区 - 对flush的调用将写入缓冲区中的任何字符。通常,这不是必需的,因为流本身将处理此问题。但是,在某些情况下,您可能需要确保在继续之前输出某些内容 - 这是您使用flush()
调用的地方。
答案 1 :(得分:10)
通常输出到文件或控制台是缓冲的,至少在打印换行符之前输出文本。刷新确保缓冲的任何输出都到达目的地。
我确实使用它,例如当我在获得输入之前创建类似Do you want to continue (Y/n):
的用户提示时。
这可以模拟(在使用Python 2.7的Ubuntu 12.4上):
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秒才能完成该程序
答案 2 :(得分:0)
我们在这里有两个完美的答案
Anthon 非常清楚地理解,基本上,从技术上讲,直到下一行完成时,打印行才运行(print)。
从技术上讲,这条线确实在运行,直到缓冲 下一行已完成运行。
对于运行sleep
函数并希望在print
函数启动之前可以看到其打印功能的某些人来说,这可能会导致错误。
那我为什么还要添加另一个答案?
未来已经到来,我想花点时间来更新一下你:
sleep
首先,我相信这是一个内在玩笑,旨在显示一个错误:未来未定义^ _ ^
我现在正在查看 PyCharm的文档,看起来他们添加了内置在print函数自身内部的flush方法,看看这个: >
from __future__ import print_function
因此我们也许可以使用:(不确定参数的使用顺序是否应该相同)
def print(self, *args, sep=' ', end='\n', file=None): # known special case of print
"""
print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
Prints the values to a stream, or to sys.stdout by default.
Optional keyword arguments:
file: a file-like object (stream); defaults to the current sys.stdout.
sep: string inserted between values, default a space.
end: string appended after the last value, default a newline.
flush: whether to forcibly flush the stream.
"""
pass
或此
:from __present__ import print_function
from time import sleep
print('Hello World', flush=True)
sleep(5)
正如Anthon所说:
如果运行此命令,将看到提示字符串未显示 直到睡眠结束并且程序退出。如果您取消注释该行 刷新,您将看到提示,然后必须等待5秒钟 程序完成
因此,我们将其转换为当前情况:
如果运行此命令,则会看到提示,然后必须等待5秒钟
为程序完成,如果您更改行
刷新到print('Hello World', file=sys.stdout , flush=True)
后,您将看到提示字符串未显示
直到睡眠结束并且程序退出。