如何测试变量是否持有一个lambda?
有没有办法测试一个变量是否是一个 lambda
表达式?
我想在单元测试中检查一个类型:
self.assertEquals(lambda, type(myVar))
我发现这个 type
看起来是“function”,但我没有找到任何明显的内置类型可以匹配它。
当然,我可以这样写,但感觉有点笨拙:
self.assertEquals(type(lambda m: m), type(myVar))
5 个回答
13
使用 types
模块:
from types import *
assert isinstance(lambda m: m, LambdaType)
根据文档,使用 from types import *
是安全的。
注意:这其实是错的!
types.LambdaType 是 types.FunctionType
,所以上面的表达式会同时匹配 Lambda 函数和普通函数。
50
这事儿拖了好几年,但 callable(mylambda)
会对任何可调用的函数或方法返回 True
,包括 lambda 函数。用 hasattr(mylambda, '__call__')
也能做到这一点,但看起来就没那么优雅。
如果你想知道某个东西是否 绝对是 一个 lambda 函数,那我建议你使用:
callable(mylambda) and mylambda.__name__ == "<lambda>"
(这个答案适用于 Python2.7.5 及之后的版本。)
25
def isalambda(v):
LAMBDA = lambda:0
return isinstance(v, type(LAMBDA)) and v.__name__ == LAMBDA.__name__
当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。