How can I test whether a variable holds a lambda?

ral*_*ide 21 python lambda types class

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))
Run Code Online (Sandbox Code Playgroud)

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))
Run Code Online (Sandbox Code Playgroud)

Aug*_*sta 24

这是过去几年,但callable(mylambda)将返回True任何可调用的函数或方法,包括lambdas.hasattr(mylambda, '__call__')做同样的事情,但不那么优雅.

如果您需要知道某些东西是否完全属于 lambda,那么mylambda.__name__ == "<lambda>"就是我使用的东西.

(这个答案与Python2.7.5有关.)


Ale*_*lli 18

def isalambda(v):
  LAMBDA = lambda:0
  return isinstance(v, type(LAMBDA)) and v.__name__ == LAMBDA.__name__
Run Code Online (Sandbox Code Playgroud)

  • @ralfoide,你可以使用`v .__ name __ ==(lambda:None).__ name__`如果你担心`lambda`改名的话 (2认同)

dbg*_*dbg 9

使用types 模块:

from types import *

assert isinstance(lambda m: m, LambdaType)
Run Code Online (Sandbox Code Playgroud)

根据文档,使用是安全的from types import *.

  • 这是错误的:types.LambdaType*是*types.FunctionType.这意味着这将匹配Lambdas和函数 (12认同)
  • 也可以在Python 2.7中使用`from types import LambdaType`而不是`from types import*` (2认同)

小智 7

无需做任何改动,内置的inspect模块可以为您处理。

import inspect
print inspect.isfunction(lambda x:x)
Run Code Online (Sandbox Code Playgroud)