Ответ 1
Вы можете создать закрытие для этой цели:
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]
Есть ли способ в 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 таким образом, что a = 1, c = 4 и b привязаны к значениям в myList?
Вы можете создать закрытие для этой цели:
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]
Один подход заключается в использовании 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)
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)