1

次の形式のジェネレーターを作成するとします。

e=[(lambda x:2*x)(x) for x in range(10)]

結果を実行して蓄積する方法は次のとおりです。

list([(lambda x:2*x)(x) for x in range(10)])

ただし、実際に次のようにクリーンアップ操作(おそらくファイルの削除)を実行している場合:

[(lambda x:db.delete(x.path()))(x) for x in self.candidates if x is not None]

これを実行するための慣例は何ですか - 私が興味を持っている結果がないので、このシナリオではリストは本当に奇妙に見えますか?

4

1 に答える 1

2

従来の for ループを使用するだけです。

for x in self.candidates:
    if x is not None:
        db.delete(x.path())    

ここでは、リスト内包表記とラムダは不必要に洗練されています。コードが読みにくくなっているだけです。

より適切なユースケースで、実際にジェネレーターを消費する必要がある場合は、それを長さゼロの両端キューに指定することでこれを行うことができます。

>>> from __future__ import print_function
>>> import collections
>>> g = (print(x) for x in 'potato')
>>> _ = collections.deque(g, maxlen=0)
p
o
t
a
t
o
于 2013-06-04T04:09:39.793 に答える