Py学习  »  Python

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

Zidaan Hayat • 3 年前 • 1364 次点击  

假设我有一个字符串形式的函数调用,比如 "log(2, floor(9.4))" .我想解构调用,让我能够访问第一次调用的函数名和参数,并准确推断函数调用作为参数是否为参数。

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

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

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/130605
 
1364 次点击  
文章 [ 1 ]  |  最新文章 3 年前
BrokenBenchmark
Reply   •   1 楼
BrokenBenchmark    3 年前

你可以使用 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)

这将产生:

['2', 'floor(9.4)']

我从手动检查 ast.dump(parse_tree) .

注意,我写的东西有点快,有点脏,因为只有一个字符串需要解析。如果你想解析很多这样的字符串(或者一个更大的程序),你应该创建 ast.NodeVisitor .如果你还想修改源代码,你应该创建 ast.NodeTransformer 相反