gpt4 book ai didi

python - contextlib.redirect_stdout 总是一个好主意吗?

转载 作者:行者123 更新时间:2023-11-28 21:48:26 34 4
gpt4 key购买 nike

自从我知道了这个模式,我就一直在使用

with open('myfile.txt','w') as myfile:
with contextlib.redirect_stdout(myfile):
# stuff
print(...) # gets redirected to file

这让我可以使用打印语法(我更喜欢)写入文件,我可以轻松地将其注释掉以打印到屏幕以进行调试。但是,通过这样做,我将失去写入文件和屏幕的能力,并且可能编写不太清晰的代码。还有其他我应该了解的缺点吗?这是我应该使用的模式吗?

最佳答案

is this a pattern I should be using?

在这种特殊情况下,我确实认为您的模式不是惯用的,并且可能会让代码的读者感到困惑。内置的 print(因为这是一个 Python-3x 问题)已经有一个 file keyword argument这将完全按照 redirect_stdout 在您的示例中执行的操作:

with open('myfile.txt', 'w') as myfile:
print('foo', file=myfile)

并引入 redirect_stdout 只会让您的读者想知道您为什么不使用内置功能。 (就我个人而言,我发现嵌套的 with 很难看。\ 分隔的 with 更难看。)

至于注释掉(以及打印到 stdout 和文件)的方便性,您可以根据需要进行任意多次 print 调用,并进行注释根据需要将它们取出

with open('myfile.txt', 'w') as myfile:
print('foo')
print('foo', file=myfile)

Are there any other disadvantages I should know about

除了它可能不是最佳解决方案(如本例)之外,我想不出任何确定的东西。

编辑:

来自doc :

Note that the global side effect on sys.stdout means that this context manager is not suitable for use in library code and most threaded applications. It also has no effect on the output of subprocesses.

关于python - contextlib.redirect_stdout 总是一个好主意吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35370052/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com