Найти в Дзене
Властелин машин

Модуль inspect и самый частый код разработчика, который можно упростить до пары строк

Превратите сложные задачи в простые: узнайте, как модуль inspect помогает разработчикам отлаживать и лучше понимать чужой код, а также сокращать время, затрачиваемое на рутинные действия. Начнем с описания самых простых и полезных функций модуля. getmodule и getfile позволяют получить имя модуля и файла, в которых определен импортированный объект: Для получения описания параметров и значений по умолчанию исследуемой функции обратитесь к signature: Пожалуй, самым полезным объектом модуля является фрейм/блок. Функция currentframe возвращает ссылку на текущий блок кода, у которого есть следующие важные атрибуты: Ниже демонстрируются эти свойства фреймов: Представленные выше свойства можно использовать для автоматизации присвоения внутренним атрибутам значений переменных, передаваемых в конструкторе класса, вида: self.a=a ... Этот шаблонный код, пожалуй, писал каждый питонист хотя бы раз. Если делать то же через функцию, то понадобится обратиться к вышестоящему фрейму: Схожий функционал за
Оглавление

Превратите сложные задачи в простые: узнайте, как модуль inspect помогает разработчикам отлаживать и лучше понимать чужой код, а также сокращать время, затрачиваемое на рутинные действия.

Начнем с описания самых простых и полезных функций модуля.

getmodule и getfile

getmodule и getfile позволяют получить имя модуля и файла, в которых определен импортированный объект:

function signature

Для получения описания параметров и значений по умолчанию исследуемой функции обратитесь к signature:

-2

frame

Пожалуй, самым полезным объектом модуля является фрейм/блок. Функция currentframe возвращает ссылку на текущий блок кода, у которого есть следующие важные атрибуты:

  • f_locals - словарь локальных переменных
  • f_globals - словарь глобальных переменных
  • f_back - позволяет обратиться к фрейму на уровень выше
  • f_code - объект кода, привязанный к фрейму, как правило, описывает функцию, в которой происходит выполнение блока. В свою очередь, имеет атрибут co_varnames, содержащий имена аргументов и локальных переменных;

Ниже демонстрируются эти свойства фреймов:

-3

store_attr

Представленные выше свойства можно использовать для автоматизации присвоения внутренним атрибутам значений переменных, передаваемых в конструкторе класса, вида:

self.a=a

...

Этот шаблонный код, пожалуй, писал каждый питонист хотя бы раз.

-4

Если делать то же через функцию, то понадобится обратиться к вышестоящему фрейму:

-5

Схожий функционал заложен в функции store_attr из модуля fastcore.basics:

-6

stack

Еще посредством функции stack модуля inspect из произвольной строки можно получить информацию о стеке вызовов по аналогии с тем, который выводится при ошибке. Пусть у нас есть модуль:

-7

После вызова f0 мы получим информацию о номере строки текущего фрейма (lineno), функции (function) и файле, в котором она находится (filename). Кроме того, ниже из стека выводится информация о служебных инструментах, которые используются collab-ом:

-8

-9