2016-07-19 9 views
-1

Можно ли передать два аргумента в функцию, которая возвращает true и фильтрует список? Я пытаюсь получить дивизор от пользователя, и дивиденд будет выбран из списка.Сколько аргументов может быть передано filter()

new_list=[1,2,3,4,5,6,7,8,9,10] 
    print "Get the divisor" 
    divisor=int(input()) 
    h=lambda x,divisor: x%divisor==0 
    ans=filter(h(x,divisor),new_list) 
    print ans 

ответ

2

Да, вы можете, если у вас есть определенный divisor в окружающей области.

Но тогда вы не будете нуждаться в использовать его в качестве аргумента больше:

divisor = int(raw_input()) 
ans = filter(lambda x: x % divisor==0, new_list) 
print ans 
0

У вас есть две ошибки в своем подходе:

(1) Вам не нужно определите divisor как второй аргумент lambda, так как он инициализирован оператором input.

(2) Вы должны только передать ссылку на функцию filter, не вызывать функцию.

new_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 
print "Get the divisor" 
divisor = int(input()) 

h = lambda x: x % divisor == 0 
ans = filter(h, new_list) 
print ans 
0

Не обязательно передавать divisor в качестве аргумента; он просто доступен как закрытия:

new_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 
print "Get the divisor" 
divisor = int(raw_input()) # on Python 2, you want to use raw_input 

# divisor is taken from the parent scope here 
h = lambda x: x % divisor == 0 
ans = filter(h, new_list) 
print ans 

Обратите внимание, что вам нужно передать объект функции в качестве первого аргумента filter(), а не результат вызова функции. filter() передает только один аргумент этому объекту функции.

+0

@Butters: 'filter()' передает только один аргумент функции, всегда. –

Смежные вопросы