如何区分lambda和def函数?
有没有办法对 lambdas 和 def 函数进行类型比较?我希望False通过某些过程输出,但我不知道这种粒度级别是否是 Python 函数的本机。我的用例是确保注册到事件的函数不是 lambda,以便以后可以通过另一种方法取消注册。
def foo():
pass
(lambda: None).__class__ == foo.__class__ # >> True
编辑:我的用例实际上比功能更具教育意义,所以我真的只关心区分 lambda 函数和 def 函数的方法。
回答
您可以检查函数的名称。一个 lambda 将被命名为<lambda>。
def islambda(f):
return f.__name__ == '<lambda>'
def foo():
pass
print(islambda(lambda: None)) # True
print(islambda(foo)) # false