如何为Python的itertools.ifilter函数提供额外参数?
在Python中,我有一个这样的函数:
def is_a_nice_element(element, parameter):
#do something
return True or False
现在我想用这个函数来过滤一个列表,并且给它一个固定的参数。Python有一个叫做itertools.ifilter的函数,但我不知道怎么传递这个参数。这样做可能吗?如果不行,我该怎么解决这个问题呢?
4 个回答
1
这些解决方案使用了 lambda
和 functools.partial
,确实是正确的,直接回答了你的问题,但我觉得它们并不是最理想的解决办法。
使用 filter
、itertools.ifilter
、map
和 itertools.imap
结合匿名函数,通常会比使用生成器表达式或列表推导式要不那么清晰。比如,在这种情况下,我会写出生成器表达式
(item for item in iterable if is_a_nice_element(item, constant))
而不是使用 ifilter
。在这个例子中,ifilter
的解决方案还是比较容易理解的,但在很多情况下,费劲去定义一个恰到好处的函数,可能没有直接进行操作来得更划算。
5
我更喜欢 functools.partial,而不是 lambda
。
itertools.ifilter( partial(is_a_nice_element, parameter=X), iterable )
3
把它放在一个 lambda
里:
itertools.ifilter(lambda e: is_a_nice_element(e, 42), iterable)
42 是你额外的参数,或者你想要的其他任何东西。