任何人都可以帮助我理解这一点:
def isalambda(v):
return isinstance(v, type(lambda: None)) and v.__name__ == '<lambda>'
答案 0 :(得分:2)
该函数测试是否使用lambda
语句创建了一个函数对象:
>>> l = lambda: None
>>> l
<function <lambda> at 0x1020ae0c8>
>>> l.__name__
'<lambda>'
lambda
表达式创建一个常规函数对象,其名称设置为<lambda>
,因为没有def
语句命名该函数。
它也可以使用:
from types import FunctionType
def isalambda(v):
return isinstance(v, FunctionType) and v.__name__ == '<lambda>'
from inspect import isfunction
def isalambda(v):
return isfunction(v) and v.__name__ == '<lambda>'
测试并非万无一失;您可以将任何字符串分配给__name__
属性:
>>> def foo(): pass
...
>>> foo.__name__
'foo'
>>> foo.__name__ = '<lambda>'
>>> foo.__name__
'<lambda>'
>>> foo
<function <lambda> at 0x1020ae050>