相当于当前运行时的帧。
源代码
import inspect
from objprint import op
def f():
frame = inspect.currentframe(),
op(frame, honor_existing=False, depth=2)
f()
输出out
(
<frame 0x23376b59f00
.f_back = <frame 0x23376c45580 ... >, # 调用他的frame是谁 就是上一个人
.f_builtins = { ... }, # 当前frame对应的内置函数
.f_code = <code 0x23376c29ac0 ... >, # code object里面的内容,变量名字, 字节码 ...
.f_globals = { ... }, # 当前函数眼里的全局变量
.f_lasti = 62, # 上一个frame代码里面运行到第几行了
.f_lineno = 6, # 当前frame代码运行到第几行
.f_locals = { ... }, # 当前函数所有局部变量的值
.f_trace = None, # 这里是设置的钩子函数, 可以在每一次运行字节码,或者每一行程序代码的时候,执行的回调, 例如python的 debug pdb。可以通过sys.settrace设置
.f_trace_lines = True, # 每一行trigger一下函数
.f_trace_opcodes = False # 每一个字节码trigger一下这个函数
>
)
例子1
获取调用我这个函数的名字的文件路径 获取调用我这个函数是第几行
import inspect
def f():
frame = inspect.currentframe()
print(frame.f_back.f_code.co_filename)
print(frame.f_back.f_lineno)
def g():
f()
f()