2016-04-09 23 views
-2

Kann Lambda-Ausdruck mehrere Zeilen in Python haben? Wie gemeinsame Funktionen.Lambda-Ausdrücke in Python

Kann ich so etwas tun?

res = lambda x y: 
    z = x**2 + 5 
    z + x + y 

(Ich weiß, dass diese Funktion in einer Zeile geschrieben werden kann, ist es ein Beispiel)

+6

Nein, sie können nicht; benutze einfach ein normales 'def'. – jonrsharpe

+1

Der Hauptzweck der "Lambda" -Funktion ist, dass es in-line definiert werden kann. Wenn Sie eine Mehrfachlinienfunktion verwenden möchten, können Sie einfach reguläre Funktionen mit 'def' verwenden. – Kasramvd

+0

Das Schlüsselwort hier ist Lambda * Ausdruck *; Es kann keine Aussage enthalten, geschweige denn mehr als eine. – chepner

Antwort

3

Sie können über mehrere Zeilen nach der gleichen Regel aufgeteilt werden, dass jeder Ausdruck über mehrere Zeilen aufgeteilt werden kann. Sie können den Backslash \ verwenden, um zu verhindern, dass ein Zeilenumbruch die aktuelle Anweisung beendet, oder die Tatsache verwenden, dass Zeilenumbrüche innerhalb der verschiedenen Formen von Klammern zulässig sind: (), [], {}.

Allerdings ist ein Lambda-Ausdruck genau das, ein Ausdruck. Es darf keine Zuweisungsanweisungen (oder andere Anweisungen) enthalten.

Die genauen Details sind definiert durch the Python grammar.

1

IMHO, können Sie nicht.

Wenn Sie einige temporäre Variable in einer Lambda-Funktion benötigen, als hässliche Abhilfe Sie tun können:

res = lambda x,y : [ z**2 + z**4 + z for z in [x**2+5]][0] 
1

Für ein interessantes Beispiel dafür, wie man Lambda-Ausdrücke überprüfen this heraus nehmen kann weit.

Obwohl Sie unbedingt eine Funktion dafür verwenden sollten.

+0

Dies gibt den Standardausgang aus und gibt '[None]' zurück. – chepner