将print函数的flush参数设置为True作为默认值?

6

我知道您可以通过设置flush=True来在打印语句后刷新,例如:

print("Hello World!", flush=True)

然而,如果你需要大量的打印输出,手动为每个打印操作设置flush=True会非常繁琐。那么是否有一种方法可以将Python 3.x的默认设置为flush=True呢?我正在考虑类似于使用numpy.set_printoptions的打印选项。


6
请编写自己的函数(并考虑为什么要明确刷新每个打印 - 这不是默认设置的原因)。 - user2357112
@user2357112supportsMonica 那绝对是有效的。那么我假设print()函数没有内置支持来更改打印选项,对吗? - NotDuplicateSL
@NotDuplicateSL 或许通过 stdbuf 更改 stdout 的缓冲区会更合理一些? - dedObed
@user2357112这是一个完全有效的情况和问题。考虑到在一个文件中添加了多线程或调用外部进程,在该文件中从其他文件甚至Stack Overflow移动了一些方法。 - atrelinski
@atrelinski:我不确定这与你回复的评论有什么关联,但如果你想说每次调用都刷新会使你的打印线程安全... 不,这样做是不够的。你需要实际的同步来实现线程安全。 - user2357112
4个回答

8
你可以使用partial
from functools import partial
print_flushed = partial(print, flush=True)
print_flushed("Hello world!")

从文档中得知:

partial() 函数用于部分函数应用,它“冻结”函数的一些参数和/或关键字,从而产生一个具有简化签名的新对象。


1

其中一个选项是创建自己的

def print_r(data):
  print(data, flush=True)

-1
你可以使用类似这样的代码:
def decorator(func):
    printer = func
    def wrapped(*args):
        printer(*args, end=' *\n', flush=True)
    return wrapped

print = decorator(print)

for i in range(5):
    print(i)

0 *
1 *
2 *
3 *
4 *

1
这真的很奇怪。为什么要使用 end=' *\n'?而且为什么要使用装饰器呢? - user2357112
@user2357112supportsMonica end 是故意放置的,以展示我们可以为参数设置任何值。此外,我不知道 Python 中有这样的 partial - Henry Tjhia
@user2357112supportsMonica 我认为这只是为了演示目的,因为 flush=True 的效果在输出中不可见。 - Asocia

-1
使用以下代码,使得所有接下来的print()调用在文件中执行时都带有check=True参数。
import functools
print = functools.partial(print, flush=True) # all print()s will be called with "flush=True"

此解决方案通过使用 partial功能覆写了print()方法,其描述如下:

partial()用于部分函数应用,它“冻结”了函数的一部分参数和/或关键字,从而产生一个具有简化签名的新对象。


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