inspect в Python

Содержание
Введение
stack
Похожие статьи

Введение

stack

Изучим, что видно через inspect.stack() в одиночном скрипте

import inspect stack = inspect.stack() print(stack) print(type(stack)) print(len(stack)) frame = stack[0] print(type(frame)) print(dir(frame)) filename = frame.filename print(filename) print(type(filename)) module_name = filename.rsplit("\", 1)[-1] print(module_name)

[FrameInfo(frame=<frame at 0x0000023E96D635E0, file 'C:\A\insp.py', line 5, code <module>>, filename='C:\A\insp.py', lineno=4, function='<module>', code_context=['stack = inspect.stack()\n'], index=0, positions=Positions(lineno=4, end_lineno=4, col_offset=8, end_col_offset=23))] <class 'list'> 1 <class 'inspect.FrameInfo'> ['__add__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__match_args__', '__module__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmul__', '__setattr__', '__sizeof__', '__slots__', '__str__', '__subclasshook__', '_asdict', '_field_defaults', '_fields', '_make', '_replace', 'code_context', 'count', 'filename', 'frame', 'function', 'index', 'lineno', 'positions'] C:\A\insp.py <class 'str'> insp.py

Изучим, что видно через inspect.stack() в когда функция из одного модуля импортируетсяи вызывается в другом

inspect_demo ├── lib.py └── demo.py

# lib.py import inspect def my_function(module_name=None): if module_name is None: stack = inspect.stack() for idx, value in enumerate(stack): print(idx, value) frame = stack[1] filename = frame.filename module_name = filename.rsplit("\", 1)[-1] print("Called from:", module_name)

# demo.py from lib import my_function my_function()

python demo.py

0 FrameInfo(frame=<frame at 0x000001C0A7D3D1C0, file 'C:\A\lib.py', line 9, code my_function>, filename='C:\A\lib.py', lineno=7, function='my_function', code_context=[' stack = inspect.stack()\n'], index=0, positions=Positions(lineno=7, end_lineno=7, col_offset=16, end_col_offset=31)) 1 FrameInfo(frame=<frame at 0x000001C0A7959260, file 'C:\A\demo.py', line 5, code <module>>, filename='C:\A\demo.py', lineno=5, function='<module>', code_context=['my_function()\n'], index=0, positions=Positions(lineno=5, end_lineno=5, col_offset=0, end_col_offset=13)) Called from: demo.py

Теперь inspect.stack() возвращает список из двух элементов.

Первый элемент соответствует тому, что мы видели в предыдущем примере сейчас он относится к модулю lib.py.

Второй элемент списка относится к модулю demo.py который вызывает импортированную функцию

Автор статьи: Андрей Олегович

Похожие статьи
Основы Python
Type Hints
__future__
configparser
Менеджер контекста
docstring
#!: Shebang
Объекты
Итерация
os
pathlib
flake8

РЕКЛАМА от Яндекса. Может быть недоступна в вашем регионе

Конец рекламы. Если там пусто считайте это рекламой моей телеги

Поиск по сайту

Подпишитесь на Telegram канал @aofeed чтобы следить за выходом новых статей и обновлением старых

Перейти на канал

@aofeed

Задать вопрос в Телеграм-группе

@aofeedchat

Контакты и сотрудничество:
Рекомендую наш хостинг beget.ru
Пишите на info@urn.su если Вы:
1. Хотите написать статью для нашего сайта или перевести статью на свой родной язык.
2. Хотите разместить на сайте рекламу, подходящую по тематике.
3. Реклама на моём сайте имеет максимальный уровень цензуры. Если Вы увидели рекламный блок недопустимый для просмотра детьми школьного возраста, вызывающий шок или вводящий в заблуждение - пожалуйста свяжитесь с нами по электронной почте
4. Нашли на сайте ошибку, неточности, баг и т.д. ... .......
5. Статьи можно расшарить в соцсетях, нажав на иконку сети: