Подтвердить что ты не робот

Как проверить, содержит ли переменная лямбда?

Есть ли способ проверить, сохраняет ли переменная lambda? В контексте я хотел бы проверить тип в unit test:

self.assertEquals(lambda, type(myVar))

type кажется "функцией", но я не видел никакого очевидного встроенного типа, чтобы соответствовать ему. Очевидно, я мог бы написать это, но он чувствует себя неуклюжим:

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

Ответ 1

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

Ответ 2

Это годы прошлых лет, но callable(mylambda) вернет True для любой вызываемой функции или метода, включенных lambdas. hasattr(mylambda, '__call__') делает то же самое, но гораздо менее изящно.

Если вам нужно знать, что что-то абсолютно исключительно лямбда, то mylambda.__name__ == "<lambda>" - это то, что я буду использовать.

(Этот ответ относится к Python2.7.5.)

Ответ 3

Используйте types модуль:

from types import *

assert isinstance(lambda m: m, LambdaType)

В соответствии с документами безопасно использовать from types import *.

Ответ 4

Нет необходимости делать хаки, встроенный модуль inspect обрабатывает его для вас.

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

Ответ 5

mylambda.func_name == '<lambda>'