TGTGInsighttelegram intelligenceLIVE / telegram public index
← Python Заметки

TGINSIGHT SIMILAR POSTS

Најди сличен содржај

Изворен канал @pythonotes · Post #122 · 22 јул.

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

Hashtags

Резултати

Пронајдени 0 слични објави

Глобално пребарување

Не се пронајдени слични објави.

Оваа објава нема претходно пресметани резултати на сличност.