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 |
РЕКЛАМА от Яндекса. Может быть недоступна в вашем регионе
Конец рекламы. Если там пусто считайте это рекламой моей телеги