3 Stimmen

Anonyme Funktionen in Python aufrufen, ohne sie einer Variablen zuzuweisen

Wie macht man Selbstaufrufende anonyme Funktionen in Python?

Zum Beispiel mit JavaScript:

Standardmethode:

function fn (a) {
   if (a == 1) {
      alert(a);
   }
   else {
     alert(0);
   }
  /...
}

fn(1);

Anonymer Anruf zur Selbstanrufung:

!function(a) {
   if (a == 1) {
      alert(a);
   }
   else {
     alert(0);
   }
   /...
}(1);

Gibt es Entsprechungen in Python?

7voto

HardlyKnowEm Punkte 3128

Ich glaube nicht, dass das möglich ist, wenn man Ihre Kommentare zu den Lambda-Antworten betrachtet. Die lambda Operator ist Pythons einzige Möglichkeit, anonyme Funktionen zu unterstützen. Wenn Sie Anweisungen unterstützen müssen, dann müssen Sie eine def die immer benannt werden müssen.

Beachten Sie jedoch, dass Lambdas nur eine begrenzte Wenn-dann-Logik unterstützen können. Die folgenden zwei sind lambda Ausdrücke, die die oben beschriebene Wenn-dann-Logik implementieren:

(lambda a: alert(1 if a == 1 else 0))(1)

Wörtlicher:

(lambda a: alert(a) if a == 1 else alert(0))(1)

5voto

Praveen Gollakota Punkte 33644

Wenn Ihre Funktion einfach ist und nur Ausdrücke (keine Anweisungen) enthält, dann können Sie lambda um anonyme Funktionen zu erstellen und sie inline aufzurufen.

>>> (lambda x, y: x*y)(3, 5)
15

3voto

Dan D. Punkte 70371

Sie können eine benannte Funktion verwenden und ihren Namen nach der Verwendung aufheben:

def hello(there):
    print there
hello("france")
del hello

2voto

Gandaro Punkte 3407

Ja (Python 3 oder Python 2 mit from __future__ import print_function ) :

(lambda x: print(x))('foo')

Aber mit lambda können Sie nur eine einzige Code-Zeile schreiben.

1voto

James Punkte 3021

Sie können immer missbrauchen exec und übergibt Ihren Code als Zeichenkette:

def anon(code):
    execdict = {}
    exec('def f():{}'.format(code), execdict)
    return execdict['f']

anon("print('hello'); print('hello again')")()

(dies funktioniert in Python 3, denke ich exec verhält sich in früheren Versionen ganz anders)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X