Как я могу проверить, содержит ли переменная лямбда? - PullRequest
19 голосов
/ 07 сентября 2010

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

self.assertEquals(lambda, type(myVar))

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

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

Ответы [ 5 ]

23 голосов
/ 04 июля 2014

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

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

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

15 голосов
/ 07 сентября 2010
def isalambda(v):
  LAMBDA = lambda:0
  return isinstance(v, type(LAMBDA)) and v.__name__ == LAMBDA.__name__
10 голосов
/ 22 апреля 2014

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

from types import *

assert isinstance(lambda m: m, LambdaType)

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

6 голосов
/ 07 ноября 2015

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

import inspect
print inspect.isfunction(lambda x:x)
1 голос
/ 07 сентября 2010
mylambda.func_name == '<lambda>'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...