все Python 3typesпонятие
types.FunctionType
типы функций
Тип функций, написанных на Python через def или lambda. Нужен, чтобы отличить «настоящую» функцию от встроенной, класса или объекта с __call__.
Синтаксис
isinstance(obj, types.FunctionType)
isinstance(x, types.FunctionType) и callable(x) отвечают на разные вопросы. callable говорит «можно вызвать» — это True и для len, и для класса, и для functools.partial, и для объекта с __call__. FunctionType — «это функция из def/lambda»: у неё есть __code__, __defaults__, __closure__, и только её можно разобрать по коду. Метод, взятый у экземпляра (obj.m), — уже MethodType, а не FunctionType. Если нужно лишь вызвать — проверяйте callable; FunctionType нужен декораторам и интроспекции. types.LambdaType — то же самое имя: LambdaType is FunctionType.
Примеры
import functools
import types
def f(x):
return x
class Greeter:
def __call__(self):
return 'hi'
for obj in (f, lambda: 0, len, Greeter, Greeter(), functools.partial(f, 1)):
print(isinstance(obj, types.FunctionType), callable(obj))
# → True True / True True / False True / False True / False True / False True
import types
print(types.LambdaType is types.FunctionType) # → True
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности