【发布时间】:2012-02-02 00:55:29
【问题描述】:
我有一个code.py:
def funA():
print('A')
funA()
def funB():
print('B')
def funC():
print('C')
funB()
funC()
我想找到所有函数自己调用:
funA
funC
regex怎么写?
约束:
- 所有函数调用正常:
funname(arg1, arg2, ...) - 无混淆方式(如
lambda,exec) - 无间接递归
【问题讨论】:
-
为什么要编写正则表达式而不是遍历 AST?
-
由于 Python 的语法是上下文无关的,因此仅使用正则表达式是不可能找到所有递归函数的。
-
您真的还坚持为此使用正则表达式吗?我想我们已经很清楚地表明这是不可能的。
-
像这样的工作是解析器为做的。而且您已经在 Python 中内置了一个用于 Python 的解析器,因此您甚至不必自己编写解析器,只需阅读一些关于如何在获得 AST 后遍历它的模块文档。使用正则表达式,这是一项非常困难的任务(并且可以证明只能大致完成),但使用解析器非常容易。所以使用解析器!