我正在开发一个包含多个模块的项目。简化问题,有一些变量x。有时它可能是int或float或list。但它可能是一个lambda函数,应该以不同的方式处理。如何检查变量x是否为lambda?
例如
>>> x = 3
>>> type(x)
<type 'int'>
>>> type(x) is int
True
>>> x = 3.4
>>> type(x)
<type 'float'>
>>> type(x) is float
True
>>> x = lambda d:d*d
>>> type(x)
<type 'function'>
>>> type(x) is lambda
File "<stdin>", line 1
type(x) is lambda
^
SyntaxError: invalid syntax
>>> type(x) is function
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'function' is not defined
>>>
答案 0 :(得分:17)
您需要使用types.LambdaType
或types.FunctionType
来确保对象是这样的函数对象
x = lambda d:d*d
import types
print type(x) is types.LambdaType
# True
print isinstance(x, types.LambdaType)
# True
然后你需要检查名称以确保我们正在处理lambda函数,就像这样
x = lambda x: None
def y(): pass
print y.__name__
# y
print x.__name__
# <lambda>
所以,我们把这些检查放在一起就像这样
def is_lambda_function(obj):
return isinstance(obj, types.LambdaType) and obj.__name__ == "<lambda>"
正如@Blckknght建议的那样,如果你想检查对象是否只是一个可调用的对象,那么你可以使用内置的callable
函数。
答案 1 :(得分:2)
如果您更喜欢 typing
模块,请使用 Callable
:
In [1]: from typing import Callable
In [2]: isinstance(lambda: None, Callable)
Out[2]: True