前言
Python有一类非常特殊的class名为frame有时称之为stack frame
怎么理解?stack frame字面上看有stack的含义,和函数逐级调用相关。
探究
通过代码演示
imoprt inspect
frame = inspect.currentframe()
此时frame
就是一个frame object包含以下信息:
f_back
调用这个函数的函数的framef_builtins
该函数内置函数f_code
该函数对应code object(类似字节码)f_globals
该函数眼中的全局变量f_lasti
last instruction类似汇编中program counter(函数执行到哪了下一步干嘛)f_lineno
当前执行代码所在行数(给人看的)f_locals
该函数眼中的局部变量f_trace
trace function允许每次执行一行代码(字节码)调用一个callback通常为None(可以用来实现debug)f_trace_lines
控制trace function逐行triggerf_trace_opcodes
控制trace function逐字节trigger
使用如此强大的frame就可以从任何一个局部调出全局信息。
参考
【python】python的骨架frame——你写的代码都是运行在它里面的?_哔哩哔哩_bilibili
inspect — Inspect live objects — Python 3.12.0a0 documentation