How can I test whether a variable holds a lambda?

前端 未结 5 1508
灰色年华
灰色年华 2021-02-04 00:19

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(my         


        
相关标签:
5条回答
  • 2021-02-04 01:09
    def isalambda(v):
      LAMBDA = lambda:0
      return isinstance(v, type(LAMBDA)) and v.__name__ == LAMBDA.__name__
    
    0 讨论(0)
  • 2021-02-04 01:13

    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.

    0 讨论(0)
  • 2021-02-04 01:15
    mylambda.func_name == '<lambda>'
    
    0 讨论(0)
  • 2021-02-04 01:16

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

    0 讨论(0)
  • 2021-02-04 01:16

    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)
    
    0 讨论(0)
提交回复
热议问题