2016-07-19 18 views
-1

Können wir zwei Argumente in der Funktion übergeben, die true zurückgibt und eine Liste filtert? Ich versuche Divisor von Benutzer zu bekommen und Dividende aus der Liste abgeholt werden.Wie viele Argumente können an filter übergeben werden()

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 

Antwort

2

Ja, können Sie, wenn Sie divisor im umgebenden Bereich definiert haben.

Aber dann werden Sie nicht brauchen es als Argument zu verwenden mehr:

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

Sie haben zwei Fehler in Ihrem Ansatz:

(1) Sie brauchen nicht zu Definieren Sie divisor als zweites Argument zu lambda, da es von Ihrer input Anweisung initialisiert wird.

(2) Sie sollten die Funktionsreferenz nur an filter übergeben, nicht die Funktion aufrufen.

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

Sie brauchen nicht in divisor als Argument zu übergeben; es ist einfach verfügbar als Schließung:

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 

Beachten Sie, dass Sie die Funktion Objekt als erstes Argument zu filter(), nicht das Ergebnis der Aufruf der Funktion übergeben müssen. filter() übergibt immer nur ein Argument an dieses Funktionsobjekt.

+0

@Butters: 'filter()' übergibt immer nur ein Argument an die Funktion. –

Verwandte Themen