1

是否有更短的方法来执行以下for-with组合:

for resource in gen_resources():
    with resource:
        DoWork1(resource)
        .
        .
        DoWorkN(resource)

如果可能的话,我想避免额外的行+缩进。

资源可以是在离开循环迭代时必须完成的任何东西(打开文件、活动对象等)

4

2 回答 2

4

with您可以创建一个对每个元素执行语句的生成器函数:

def iterate_with(iterable):
    for element in iterable:
        with element:
            yield element

采用:

for resource in iterate_with(gen_resources()):
    DoWork(resource)

我可能仍然会使用您的原始代码,因为代码的读者可能不清楚with这里使用了该语句。

于 2012-10-15T14:16:13.873 回答
2

只是因为你在里面有一个声明with

for resource in gen_resources():
    with resource:  DoWork(resource)

这似乎通常不受欢迎,但我不知道为什么 -for并且if可以做同样的事情,而且非常方便......

于 2012-10-15T14:06:32.210 回答