2016-08-14 8 views
-4

Ich weiß Funktionen als Argumente in Python herumgereicht werden können, aber ich verstehe nicht, warum ich kann das nicht tun:Warum kann ich beim Aufrufen einer anderen Funktion keine Funktion als Argument definieren?

>>> def foo(bar): return bar() 
... 
>>> foo(def a(): return 'hello') 
    File "<stdin>", line 1 
    foo(def a(): return 'hello') 
     ^
SyntaxError: invalid syntax 

wenn diese vollkommen gültig ist:

>>> def foo(bar): return bar() 
... 
>>> def a(): return 'hello' 
... 
>>> foo(a) 
'hello' 
+8

Weil das ist, was die Sprachsyntax sagt. Eine [Funktionsdefinition] (https://docs.python.org/3/reference/compound_stmts.html#function-definitions) ist eine zusammengesetzte Anweisung, sie kann kein Funktionsargument sein. – jonrsharpe

Antwort

4

def ist ein Statement. Wenn Sie eine anonyme Funktion wünschen, verwenden Sie einen Ausdruck lambda.

+0

Um weitere Neugier von der OP zu erwarten, ist es erwähnenswert, dass der Funktionsumfang, den Sie in einem Lambda erstellen können, begrenzt ist. Es ist eine Funktion, dass Sie komplizierten mehrzeiligen Code nicht in einen Ausdruck schieben können. – BrenBarn

2

Sie können def dafür nicht verwenden. Für die Objektdarstellung einer Funktion können Sie eine lambda verwenden.

foo(lambda a: 'hello') 

Oder Sie können den Namen einer Funktion verwenden, wie Ihr zweites Beispiel zeigt.

Verwandte Themen