TGViewer
Python Заметки Python Заметки @pythonotes · 2.2K subscribers
Post #122 763
Python позволяет передавать любые объекты в качестве аргументов или возвращаемых значений.
А так как в Python всё объекты то функции и классы тоже входят в этот список.
Но как проверить что нам вернули именно функцию? Не класс, не None и не число и не строку.
(Да, динамическая типизация в Python даёт о себе знать)

Например, у нас есть функция, полученная из вне.

>>> func = some_module.get_function()

Надо убедиться что это именно функция. Какие есть варианты? Проверим, вызываемый ли это объект.

>>> hasattr(func, '__call__')
True

Но это ничего не говорит о типе объекта. Вызываемым может быть и класс и генератор и lambda.
Лучше всего сравнить тип объекта с типом функции. Но как это сделать? Если бы у нас был int, то всё очевидно:

>>> isinstance(value, int)

Но где взять ссылку на тип функции? Можно просто забрать его от любой функции

>>> # создаём пустую функцию
>>> def f():pass
>>> # сравниваем типы
>>> isinstance(func, type(f))
True

Каждый раз нам этого делать не надо. Все нужные типы уже есть в модуле types, созданные именно таким способом. Нам остаётся только сделать сравнение

>>> import types
>>> isinstance(func, types.FunctionType)
True

Но есть способ еще проще и понятней, это модуль inspect. Всё тоже самое но завёрнуто красиво.

>>> import inspect
>>> inspect.isfunction(func)
True

Приведу неполный но часто используемый мною список функций этого модуля.

Функции, определяющие что объект это:

.isfunction() — функция
.isbuiltin() — стандартная функция Python
.isclass() — класс (не инстанс класса)
.isabstract() — абстрактный класс
.ismethod() — метод класса
.isgenerator() — генератор
.ismodule() — модуль

#libs
More from @pythonotes
  1. Sep 21, 2026­ WebAssembly это мощная технология позволяющая загружать практически любое приложение в б…
  2. Aug 17, 2026Не так давно столкнулся с API который в ответе с ошибкой присылал только статус-код. Без п…
  3. Jul 20, 2026У меня основная ОС это Linux. Но нередко требуется делать сборку клиента под Windows. Соби…
  4. Jul 13, 2026В прошлый раз был пример с понижением привелегий процесса. Проблема в том, что обратно под…
  5. Jul 6, 2026Модуль pwd может использоваться для считывания информации о пользователях из базы данных п…
  6. Jun 22, 2026Недавно я реализовал Multi Tenancy систему на FastAPI + SQLAlchemy и пересобрал её в небол…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →