gpt4 book ai didi

python - 可以有条件地使用 "with"语句吗?

转载 作者:太空狗 更新时间:2023-10-29 17:44:04 27 4
gpt4 key购买 nike

我有一个大致如下结构的 Python 函数,它计算一些结果并将它们写入文件:

results = []
with open(filename, "w") as output:
for item in items:
result = compute_stuff(item)
write_result(item, result, output)
results.append(result)
return results

现在我并不总是想将结果写入文件 - 有时我只想计算它们并将它们返回。使“write_result”成为有条件的很容易,但是有没有一种方法可以使“with”语句中的文件创建与条件相关? (我知道我可以显式处理文件的打开和关闭,但我会招致创建“with”语句以避免的“try/finally”开销。)

有没有优雅的解决方案?

编辑添加:我可能过于简化了这个例子。我没有写入任意文件,而是使用 matplotlib.backends.backend_pdf.PdfPages ( link ),并在每个步骤中添加一个绘图(PDF 中的新页面)。特别是,这意味着我无法使用 PdfPages 重新打开 PDF 文件,因为它会被覆盖。

最佳答案

您可以编写自己的上下文管理器函数:

class Dummysink(object):
def write(self, data):
pass # ignore the data
def __enter__(self): return self
def __exit__(*x): pass

def datasink(filename):
if filename:
return open(filename, "w")
else:
return Dummysink()

...

results = []
with datasink(filename) as output:
for item in items:
result = compute_stuff(item)
write_result(item, result, output)
results.append(result)
return results

关于python - 可以有条件地使用 "with"语句吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22226708/

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