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

内に1つのステートメントがあるためだけですwith

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

これは一般的に嫌われているようですが、私にはその理由がわかりません -forそしてif同じことをすることができ、とても便利です...

于 2012-10-15T14:06:32.210 に答える