有两种配方可在这里,一个需要外部库,另一个是只使用标准库。他们并没有 完全 按照自己的意愿去做,因为他们实际上是在修改正在执行的函数以获取其函数,locals()
而不是locals()
在函数执行之后,这是不可能的,因为在函数完成执行后本地堆栈不再存在。
另一个选择是查看调试器(例如WinPDB或什至是pdb
模块)的功能。我怀疑他们使用inspect
模块(可能与其他模块一起使用)来获取函数正在执行的框架并locals()
以此方式进行检索。
读取标准库中的某些代码后,您要查看的文件可能是bdb.py
,该文件应位于Python标准库其余部分的任何位置。具体来说,看一下set_trace()
与之相关的功能。这将使您了解Python调试器如何分解为该类。您甚至可以直接使用它。要使框架通过以set_trace()
查看inspect
模块。