如何测试变量是否包含lambda?

时间:2010-09-07 04:46:41

标签: python class types lambda

有没有办法测试变量是否包含lambda? 上下文是我想检查单元测试中的类型:

self.assertEquals(lambda, type(myVar))

type似乎是“功能”但我没有看到任何明显的内置类型来匹配它。 显然,我可以写这个,但感觉很笨拙:

self.assertEquals(type(lambda m: m), type(myVar))

5 个答案:

答案 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>'