有没有办法测试变量是否包含lambda
?
上下文是我想检查单元测试中的类型:
self.assertEquals(lambda, type(myVar))
type
似乎是“功能”但我没有看到任何明显的内置类型来匹配它。
显然,我可以写这个,但感觉很笨拙:
self.assertEquals(type(lambda m: m), type(myVar))
答案 0 :(得分:22)
这是过去几年,但callable(mylambda)
将为任何可调用的函数或方法返回True
,包括lambdas。 hasattr(mylambda, '__call__')
做同样的事情,但不那么优雅。
如果您需要知道某些内容绝对是一个lambda,那么mylambda.__name__ == "<lambda>"
就是我所使用的。
(这个答案与Python2.7.5有关。)
答案 1 :(得分:15)
def isalambda(v):
LAMBDA = lambda:0
return isinstance(v, type(LAMBDA)) and v.__name__ == LAMBDA.__name__
答案 2 :(得分:12)
使用types
module:
from types import *
assert isinstance(lambda m: m, LambdaType)
根据文档,使用from types import *
是安全的。
答案 3 :(得分:5)
没有必要做任何黑客攻击,内置的inspect模块可以为您处理。
import inspect
print inspect.isfunction(lambda x:x)
答案 4 :(得分:1)
mylambda.func_name == '<lambda>'