41 Stimmen

Wie kann ich prüfen, ob eine Variable ein Lambda enthält?

Gibt es eine Möglichkeit zu testen, ob eine Variable eine lambda ? Der Kontext ist, dass ich einen Typ in einem Unit-Test überprüfen möchte:

self.assertEquals(lambda, type(myVar))

En type scheint "function" zu sein, aber ich habe keinen offensichtlichen builtin-Typ gesehen, der dazu passt. Offensichtlich könnte ich dies schreiben, aber es fühlt sich ungeschickt:

self.assertEquals(type(lambda m: m), type(myVar))

50voto

Augusta Punkte 6881

Dies ist seit Jahren überfällig, aber callable(mylambda) wird zurückgegeben True für jede aufrufbare Funktion oder Methode, einschließlich Lambdas. hasattr(mylambda, '__call__') macht das Gleiche, ist aber viel weniger elegant.

Wenn Sie wissen müssen, ob etwas absolut ausschließlich ein Lambda, dann würde ich verwenden:

callable(mylambda) and mylambda.__name__ == "<lambda>"

(Diese Antwort bezieht sich auf Python2.7.5 und höher.)

25voto

Alex Martelli Punkte 805329
def isalambda(v):
  LAMBDA = lambda:0
  return isinstance(v, type(LAMBDA)) and v.__name__ == LAMBDA.__name__

13voto

dbg Punkte 35

Verwenden Sie die types Modul :

from types import *

assert isinstance(lambda m: m, LambdaType)

Laut den Unterlagen ist es sicher, Folgendes zu verwenden from types import * .

ACHTUNG: Das ist falsch! types.LambdaType is types.FunctionType so dass die obige Exrpession sowohl auf Lambdas als auch auf Funktionen passt.

4voto

user3238121 Punkte 1

Es ist nicht nötig, irgendwelche Hacks zu machen, die eingebaute prüfen Modul übernimmt dies für Sie.

import inspect
print inspect.isfunction(lambda x:x)

0voto

Ming-Tang Punkte 16979
mylambda.func_name == '<lambda>'

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