Ответ 1
def isalambda(v):
LAMBDA = lambda:0
return isinstance(v, type(LAMBDA)) and v.__name__ == LAMBDA.__name__
Есть ли способ проверить, сохраняет ли переменная lambda
?
В контексте я хотел бы проверить тип в unit test:
self.assertEquals(lambda, type(myVar))
type
кажется "функцией", но я не видел никакого очевидного встроенного типа, чтобы соответствовать ему.
Очевидно, я мог бы написать это, но он чувствует себя неуклюжим:
self.assertEquals(type(lambda m: m), type(myVar))
def isalambda(v):
LAMBDA = lambda:0
return isinstance(v, type(LAMBDA)) and v.__name__ == LAMBDA.__name__
Это годы прошлых лет, но callable(mylambda)
вернет True
для любой вызываемой функции или метода, включенных lambdas. hasattr(mylambda, '__call__')
делает то же самое, но гораздо менее изящно.
Если вам нужно знать, что что-то абсолютно исключительно лямбда, то mylambda.__name__ == "<lambda>"
- это то, что я буду использовать.
(Этот ответ относится к Python2.7.5.)
Используйте types
модуль:
from types import *
assert isinstance(lambda m: m, LambdaType)
В соответствии с документами безопасно использовать from types import *
.
Нет необходимости делать хаки, встроенный модуль inspect обрабатывает его для вас.
import inspect
print inspect.isfunction(lambda x:x)
mylambda.func_name == '<lambda>'