开发者

How can I test whether a variable holds a lambda?

Is there a way to test whether a variable holds a lambda? The context is I'd like to check a type in a unit test:

self.assertEquals(lambda, type(myVar))

The type seems to be "function" but I didn't see any obvious builtin type to match it. Obviously, I could write this,开发者_C百科 but it feels clumsy:

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


This is years past-due, but callable(mylambda) will return True for any callable function or method, lambdas included. hasattr(mylambda, '__call__') does the same thing but is much less elegant.

If you need to know if something is absolutely exclusively a lambda, then I'd use:

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

(This answer is relevant to Python2.7.5, onwards.)


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


Use the types module:

from types import *

assert isinstance(lambda m: m, LambdaType)

According to the docs, It is safe to use from types import *.

ATTENTION to the reader: this is wrong! types.LambdaType is types.FunctionType, so the above exrpession will match both Lambdas and Functions, alike.


There is no need to do any hacks, the built in inspect module handles it for you.

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


mylambda.func_name == '<lambda>'
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜