关于python:如何检查该变量是一个lambda函数

How to check that variable is a lambda function

我正在做一个包含几个模块的项目。简化问题,有一些变量x,有时可能是int、float或list。但它可能是一个lambda函数,应该以不同的方式进行处理。如何检查变量x是lambda?

例如

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
>>> 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
>>>


您需要使用types.LambdaTypetypes.FunctionType来确保该对象是这样的函数对象

1
2
3
4
5
6
x = lambda d:d*d
import types
print type(x) is types.LambdaType
# True
print isinstance(x, types.LambdaType)
# True

然后您还需要检查名称,以确保我们正在处理lambda函数,就像这样

1
2
3
4
5
6
x = lambda x: None
def y(): pass
print y.__name__
# y
print x.__name__
# <lambda>

所以,我们把这两张支票放在一起

1
2
def is_lambda_function(obj):
    return isinstance(obj, types.LambdaType) and obj.__name__ =="<lambda>"

正如@blckknght建议的那样,如果您想检查对象是否只是一个可调用的对象,那么您可以使用内置的callable函数。