在Python中使用条件'with'语句

2024-09-30 14:30:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用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”条件的操作更复杂,我不想重复它们。在

有没有办法压缩这两个选项?在

谢谢你

总经理

编辑:我使用的是python3。在


Tags: 数据内存selfmasteraswith场景ds
2条回答

只要这两个操作分别与with一起工作,就可以按如下方式内联if语句:

with (open(sourceRef, 'rb') if sourceRef else self._validate(source)) as ds:
    dstreams['master'] = self._generateMasterFile(ds)

最干净的解决方案可能是预先定义ds

if sourceRef:
    ds = open(sourceRef, 'rb')
else:
    ds = self._validate(source)

with ds:
    dstreams['master'] = self._generateMasterFile(ds)

当您有两个以上可能的ds值时,这种方法也可以以一种干净的方式工作(您可以简单地预先扩展检查来确定ds的值)。在

相关问题 更多 >