You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python的ast.parse为同文件中定义的函数生成AST?

处理已定义函数的AST生成问题

ast.parse() 仅接受源代码字符串作为参数,直接传入函数对象会报错。要对同一文件中已定义的函数生成AST,有两种实用方法:

方法1:用inspect模块获取函数源代码

inspect.getsource() 可以直接提取函数的源代码文本,再传给ast.parse()解析,是最直接的方案:

import ast
import inspect

def foo(bar):
    print(bar)

# 获取函数的源代码字符串
foo_source = inspect.getsource(foo)
# 解析生成AST
foo_ast = ast.parse(foo_source)

# 打印AST结构(可选)
print(ast.dump(foo_ast, indent=2))

注意:该方法要求函数是在可读取源码的环境中定义的(比如本地文件,而非交互式环境动态生成或编译后的字节码)。

方法2:解析整个文件的AST并筛选目标函数

如果需要处理多个函数或依赖文件上下文,可以读取当前文件的全部源码,解析整个文件的AST后,筛选出目标函数的节点:

import ast

def foo(bar):
    print(bar)

# 读取当前文件的全部源代码
with open(__file__, 'r', encoding='utf-8') as f:
    file_source = f.read()

# 解析整个文件的AST
file_ast = ast.parse(file_source)

# 遍历AST找到名为foo的函数定义节点
foo_ast = None
for node in ast.walk(file_ast):
    if isinstance(node, ast.FunctionDef) and node.name == 'foo':
        foo_ast = node
        break

# 打印目标函数的AST结构(可选)
if foo_ast:
    print(ast.dump(foo_ast, indent=2))

注意:__file__ 在Python交互式环境中可能无法正确指向文件路径,这种场景下更适合用方法1。

内容的提问来源于stack exchange,提问作者JRR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 16:06:40