ralfoide
ralfoide

Reputation: 3033

How can I test whether a variable holds a lambda?

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))

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))

Upvotes: 42

Views: 24179

Answers (5)

Augusta
Augusta

Reputation: 7221

This is years past-due, but callable(mylambda) will return True for any callable function or method, lambdas included. hasattr(mylambda, '__call__') does the same thing but is much less elegant.

If you need to know if something is absolutely exclusively a lambda, then I'd use:

callable(mylambda) and mylambda.__name__ == "<lambda>"

(This answer is relevant to Python2.7.5, onwards.)

Upvotes: 51

dbg
dbg

Reputation: 45

Use the types module:

from types import *

assert isinstance(lambda m: m, LambdaType)

According to the docs, It is safe to use from types import *.

ATTENTION to the reader: this is wrong! types.LambdaType is types.FunctionType, so the above exrpession will match both Lambdas and Functions, alike.

Upvotes: 13

user3238121
user3238121

Reputation: 1

There is no need to do any hacks, the built in inspect module handles it for you.

import inspect
print inspect.isfunction(lambda x:x)

Upvotes: 4

Ming-Tang
Ming-Tang

Reputation: 17651

mylambda.func_name == '<lambda>'

Upvotes: 0

Alex Martelli
Alex Martelli

Reputation: 882103

def isalambda(v):
  LAMBDA = lambda:0
  return isinstance(v, type(LAMBDA)) and v.__name__ == LAMBDA.__name__

Upvotes: 26

Related Questions