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>'
精彩评论