2011-08-12 49 views
13

python有没有一种方法可以在过滤函数在调用过程中绑定多个参数的列表上调用过滤器。例如有没有办法做这样的事情:带参数的Python列表过滤

>> def foo(a,b,c): 
    return a < b and b < c 

>> myList = (1,2,3,4,5,6) 

>> filter(foo(a=1,c=4),myList) 
>> (2,3) 

这是说的是有没有办法来调用foo到α= 1,C = 4,和b被绑定到myList中值是多少?

回答

14

您可以为此创建一个封闭:

def makefilter(a, c): 
    def myfilter(x): 
     return a < x < c 
    return myfilter 

filter14 = makefilter(1, 4) 

myList = [1, 2, 3, 4, 5, 6] 
filter(filter14, myList) 
>>> [2, 3] 
34

一种方法是使用lambda

>>> def foo(a, b, c): 
...  return a < b and b < c 
... 
>>> myTuple = (1, 2, 3, 4, 5, 6) 
>>> filter(lambda x: foo(1, x, 4), myTuple) 
(2, 3) 

另一种是使用partial

>>> from functools import partial 
>>> filter(partial(foo, 1, c=4), myTuple) 
(2, 3) 
+2

+ 1为lambda。而且,如果你想使用不带参数的lambda,只需使用'filter(lambda:foo(1,4),myTuple)'。 –

-1
def foo(a,c): 
    return lambda b : a < b and b < c 

myList = (1,2,3,4,5,6) 

g = filter(foo(1,4),myList)