我有一项特殊任务,要求我跟踪任意一段 python 代码中任意变量的使用情况。我需要递归地获取树结构中的以下信息:
- 哪些函数正在使用这个变量。
- 哪些变量正在引用或作为该变量的副本。
- 调用 1 中函数的函数和引用 2 中变量的变量。
例如,在下面的一段代码中:
a=1
b=a
def funA(a):
print(a)
def funB():
funA(a)
def funC():
print(b)
全局变量a的使用跟踪记录为:
a------b
| |
| |---print
| |
| |---funC
|
|---print
|
|---funA
|
|---funB
我想知道是否有现成的工具可供我用于此任务。如果没有这样的工具,我应该先学习什么背景知识来构建这样的工具。谢谢。
简答:你不能。
长答案:可以,但您将不得不编写一些看起来很像编译器的东西。您可能会“仅仅”为 python 编写解析器,并对符号在哪个范围内使用的位置进行一些静态分析,以计算哪些其他符号。然而,正如其他人提到的那样,如果必须完成该分析,python 的动态特性将成为严重头痛的原因。无论程序多么聪明,您都会遇到静态分析根本无法做到的情况。
通常,您需要做大量的工作才能使某些东西正常工作,甚至需要更多的工作来涵盖 python 的所有不同的巧妙用途,而这些用途可能会导致您的程序充其量出现错误并巧妙地产生最坏情况下输出错误。没有什么比 bug 更糟糕的了,这不是 bug,在编译器中,那不是编译器。
我是一名优秀的程序员,十分优秀!