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

如何使用Python AST模块获取赋值节点的目标和值并过滤调用对象

实现方案

直接通过Python内置ast模块遍历语法树节点筛选即可,完整可运行代码如下:

import ast

# 示例源码,若需读取本地py文件替换为文件读取逻辑即可
source_code = """
def isMaskedArray(x): ...
isarray = isMaskedArray
masked_array = MaskedArray

_ShapeType = TypeVar("_ShapeType", bound=Any)
"""

# 解析源码生成抽象语法树
tree = ast.parse(source_code)
result = []

for node in tree.body:
    # 仅处理赋值类型节点
    if not isinstance(node, ast.Assign):
        continue
    # 过滤值为调用对象的赋值
    if isinstance(node.value, ast.Call):
        continue
    # 提取赋值目标名和对应值
    for target in node.targets:
        if isinstance(target, ast.Name):
            var_name = target.id
            # 此处适配值为普通变量引用的场景,需要支持常量、属性等类型可自行扩展判断分支
            if isinstance(node.value, ast.Name):
                var_value = node.value.id
                result.append({var_name: var_value})

print(result)

运行后输出和需求完全匹配的结果:

[{'isarray': 'isMaskedArray'}, {'masked_array': 'MaskedArray'}]
关键逻辑说明
  • ast.parse() 负责将字符串形式的Python代码转换为结构化的抽象语法树
  • 用isinstance()判断节点类型,精准筛选Assign赋值节点
  • 对赋值节点的value属性做类型判断,直接过滤掉类型为Call的赋值,也就是你需要排除的函数调用类赋值
  • 如果需要处理多目标赋值、常量赋值、属性赋值等其他场景,扩展对应节点类型的判断分支即可

如果需要解析本地Python文件,替换source_code的赋值逻辑即可:

with open("目标文件路径.py", "r", encoding="utf-8") as f:
    source_code = f.read()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 14:45:04