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())    

列表推导和 lambda 在这里是不必要的复杂性,它只是让你的代码不那么可读。

如果在更合适的用例中,您确实需要使用生成器,则可以通过将其命名为零长度双端队列来实现:

>>> 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 回答