我发现列表理解比filter+
清晰得多lambda
,但请使用任何你更容易理解的列表。
有两件事可能会减慢你对的使用filter
。
第一个是函数调用开销:使用Python函数(无论是由def还是创建的lambda
)后,过滤器的运行速度可能会比列表理解速度慢。几乎可以肯定,这还不够重要,并且在对代码进行定时并发现它是瓶颈之前,你不应该对性能进行太多考虑,但是区别就在那里。
可能适用的其他开销是,lambda
被强制访问作用域变量(value)
。这比访问局部变量要慢,并且在Python 2.x
中,列表推导仅访问局部变量。如果你使用的是Python 3.x,
则列表推导是在单独的函数中运行的,因此它也将value
通过闭包进行访问,并且这种区别将不适用。
def filterbyvalue(seq, value):
for el in seq:
if el.attribute==value: yield el