Reputation: 3033
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, but it feels clumsy:
self.assertEquals(type(lambda m: m), type(myVar))
Upvotes: 42
Views: 24179
Reputation: 7221
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.)
Upvotes: 51
Reputation: 45
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.
Upvotes: 13
Reputation: 1
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)
Upvotes: 4
Reputation: 882103
def isalambda(v):
LAMBDA = lambda:0
return isinstance(v, type(LAMBDA)) and v.__name__ == LAMBDA.__name__
Upvotes: 26