Hen*_*rik 12 python contextmanager
我有一个大致如下结构的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
Run Code Online (Sandbox Code Playgroud)
现在我并不总是想将结果写入文件 - 有时我只想计算它们并让它们返回.使"write_result"成为条件很容易,但是还有一种方法可以使"with"语句中的文件创建与条件相关吗?(我知道我可以明确地处理文件的打开和关闭,但是我会产生"try/finally"开销,创建"with"语句以避免.)
有一个优雅的解决方案吗?
编辑添加:
我可能过于简化了示例.我没有写任意文件,而是使用matplotlib.backends.backend_pdf.PdfPages(链接),并在每一步中添加一个图(PDF中的新页面).特别是,这意味着我无法重新打开PDF文件PdfPages,因为它会被覆盖.
您可以编写自己的上下文管理器功能:
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2616 次 |
| 最近记录: |