我遇到的问题是我不知道如何获取函数调用的别名。
代码的作用是跟踪文本:
"struct(...)"
代码中的:
x = struct(...)
致电时:
x()
IDE如何工作'x = struct(...)'只定义了一个在树中创建缩进的调用树中的区域,它实际上并没有在文件数据中做任何事情。
当你调用'x()'时,文件数据以'color = hash(“struct(...)”)'的颜色突出显示。
所以我需要获取别名'x',以便我可以在代码中跟踪调用...
我不能完全帮助任何人复制这个,因为这样做的代码相当大......
但我只是需要一些想法,因为我似乎无法在Google上找到任何体面的例子。
我正在寻找以下案例:
显而易见:
x = struct(...)
不那么明显:
p,x,t = 0, struct(...), True
高度无关:
p,x,t = (
0,
struct(...),
True )
所有导致调用x()
我正在使用tokenize来获取struct()的调用名,并且我将整个代码存储在'self.codeeditor.data'中......
如何使用“struct”获取“x”??
编辑: 我可以提一下,x将是struct()返回的动态创建的_SUB_STRUCT类的实例。
答案 0 :(得分:1)
我不认为tokenize
真的会在这里工作;您最好使用ast
处理语法树级别并查找Assign
个节点。
例如:
>>> [n.targets[0].id for n in ast.walk(ast.parse("x = struct()"))
if isinstance(n, ast.Assign)
and isinstance(n.value, ast.Call)
and n.value.func.id == 'struct']
['x']
答案 1 :(得分:0)
您应该可以使用dict
来获得所需的功能:
# Relates a label to a function
function_maps = {'a':str, 'b':int, 'c':print}
# Will print 'Hello World!'
function_maps['c']('Hello World!')
# Lets look for the `int` function
for key, value in function_maps.items():
if value == int:
print('The alias for `int` is: {}'.format(key))
如果没有看到更多代码,这就是我建议的方式。