我有一个变量,x我想知道它是否指向一个函数.
我希望我可以这样做:
>>> isinstance(x, function)
Run Code Online (Sandbox Code Playgroud)
但这给了我:
Traceback (most recent call last):
File "<stdin>", line 1, in ?
NameError: name 'function' is not defined
Run Code Online (Sandbox Code Playgroud)
我选择它的原因是因为
>>> type(x)
<type 'function'>
Run Code Online (Sandbox Code Playgroud) 如果我声明两个函数,a并且b:
def a(x):
return x**2
b = lambda x: x**2
Run Code Online (Sandbox Code Playgroud)
我无法type区分它们,因为它们都属于同一类型.
assert type(a) == type(b)
Run Code Online (Sandbox Code Playgroud)
另外,types.LambdaType没有帮助:
>>> import types
>>> isinstance(a, types.LambdaType)
True
>>> isinstance(b, types.LambdaType)
True
Run Code Online (Sandbox Code Playgroud)
人们可以使用__name__如下:
def is_lambda_function(function):
return function.__name__ == "<lambda>"
>>> is_lambda_function(a)
False
>>> is_lambda_function(b)
True
Run Code Online (Sandbox Code Playgroud)
但是,由于__name__可能已被修改,is_lambda_function因此无法保证返回正确的结果:
>>> a.__name__ = '<lambda>'
>>> is_lambda_function(a)
True
Run Code Online (Sandbox Code Playgroud)
有没有一种方法可以产生比__name__属性更可靠的结果?