如何解构类似Python的函数调用?

zee*_*hyt 4 python string

假设我有一个作为字符串的函数调用,例如"log(2, floor(9.4))". 我想以一种允许我访问第一个调用的函数名称和参数的方式解构调用,并准确地推断出作为参数的函数调用是否是参数。

例如,解构上面的字符串时的参数将变为[2, floor(9.4)]

我已经尝试使用一些字符串解析技术(例如逗号分割),但它似乎不起作用。

Bro*_*ark 9

您可以使用该ast模块:

import ast

data = "log(2, floor(9.4))"
parse_tree = ast.parse(data)

# ast.unparse() is for 3.9+ only.
# If using an earlier version, use the astunparse package instead.
result = [ast.unparse(node) for node in parse_tree.body[0].value.args]
print(result)
Run Code Online (Sandbox Code Playgroud)

这输出:

['2', 'floor(9.4)']
Run Code Online (Sandbox Code Playgroud)

我从手动检查 的输出中提取了要迭代的值ast.dump(parse_tree)

请注意,我写的东西有点快速和肮脏,因为只有一个字符串需要解析。如果您想要解析大量这些字符串(或更大的程序),您应该创建ast.NodeVisitor. 如果您还想对源代码进行修改,则应该创建一个子类ast.NodeTransformer