Если я объявлю две функции a
и b
:
def a(x):
return x**2
b = lambda x: x**2
Я не могу использовать type
, чтобы различать их, так как они оба одного типа.
assert type(a) == type(b)
Кроме того, types.LambdaType
не помогает:
>>> import types
>>> isinstance(a, types.LambdaType)
True
>>> isinstance(b, types.LambdaType)
True
Можно было бы использовать __name__
как:
def is_lambda_function(function):
return function.__name__ == "<lambda>"
>>> is_lambda_function(a)
False
>>> is_lambda_function(b)
True
Однако, поскольку __name__
можно было изменить, is_lambda_function
не гарантирует возврат правильного результата:
>>> a.__name__ = '<lambda>'
>>> is_lambda_function(a)
True
Есть ли способ получить более надежный результат, чем атрибут __name__
?
try
что-то, что работает только с функциями определения,except
конкретное возбужденное исключение и действовать по своему усмотрению. - person Chris_Rands   schedule 08.01.2019