如何测试变量是否持有一个lambda?

41 投票
5 回答
21942 浏览
提问于 2025-04-16 03:47

有没有办法测试一个变量是否是一个 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__

当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。

撰写回答