什么是python中的islambda函数

时间:2014-03-07 12:01:05

标签: python python-2.7

任何人都可以帮助我理解这一点:

def isalambda(v):
    return isinstance(v, type(lambda: None)) and v.__name__ == '<lambda>'

1 个答案:

答案 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>'

或使用inspect.isfunction()

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>