Python Glossary English

все 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Сообщить о неточности