我正在尝试在Python中处理大字节流。据我所知,使用'with'语句可以防止将临时数据加载到内存中,这对我来说是一个优势。
我的问题是我有两个选择源数据流的选项:原始数据流或源路径。
if sourceRef:
with open(sourceRef, 'rb') as ds:
dstreams['master'] = self._generateMasterFile(ds)
else:
with self._validate(source) as ds:
dstreams['master'] = self._generateMasterFile(ds)
这样可以正常工作,但是我有更复杂的场景,其中'with'声明之后的操作更复杂,我不想复制它们。
有没有办法压缩这两个选项?
谢谢,
克
编辑:我正在使用Python 3。
答案 0 :(得分:3)
只要两个内容都单独使用with
,您就可以按如下方式内联if
语句:
with (open(sourceRef, 'rb') if sourceRef else self._validate(source)) as ds:
dstreams['master'] = self._generateMasterFile(ds)
答案 1 :(得分:3)
最干净的解决方案可能是事先定义ds
:
if sourceRef:
ds = open(sourceRef, 'rb')
else:
ds = self._validate(source)
with ds:
dstreams['master'] = self._generateMasterFile(ds)
当您有两个以上可能的ds
值时,此方法也会以干净的方式工作(您可以事先扩展检查以确定ds
的值)。