Loading

初识Python frame object

前言

Python有一类非常特殊的class名为frame有时称之为stack frame
怎么理解?stack frame字面上看有stack的含义,和函数逐级调用相关。

探究

通过代码演示

imoprt inspect
frame = inspect.currentframe()

此时frame就是一个frame object包含以下信息:

  • f_back 调用这个函数的函数的frame
  • f_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逐行trigger
  • f_trace_opcodes 控制trace function逐字节trigger

使用如此强大的frame就可以从任何一个局部调出全局信息。

参考

【python】python的骨架frame——你写的代码都是运行在它里面的?_哔哩哔哩_bilibili
inspect — Inspect live objects — Python 3.12.0a0 documentation

posted @ 2022-07-26 18:11  azureology  阅读(406)  评论(0)    收藏  举报