首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何使用Python AST模块获取赋值节点的所有目标和值?

AST(Abstract Syntax Tree)是Python中的一个模块,用于将源代码解析为语法树,以便进一步分析和转换代码。

要获取赋值节点的所有目标和值,可以使用AST模块中的ast.parse()函数将代码解析为语法树,然后通过遍历语法树来获取赋值节点。

以下是一个示例代码,演示了如何使用Python AST模块获取赋值节点的所有目标和值:

代码语言:txt
复制
import ast

code = """
x = 5
y = x + 2
z = "hello"
"""

tree = ast.parse(code)

# 遍历语法树
for node in ast.walk(tree):
    # 判断节点类型是否为赋值节点
    if isinstance(node, ast.Assign):
        targets = []
        values = []
        
        # 获取赋值节点的目标和值
        for target in node.targets:
            # 获取目标节点的名称
            target_name = target.id
            targets.append(target_name)
        
        value = node.value
        
        # 获取值节点的值
        if isinstance(value, ast.Str):
            values.append(value.s)
        elif isinstance(value, ast.Num):
            values.append(value.n)
        
        print("目标:", targets)
        print("值:", values)
        print("-------------------------")

以上代码将输出以下结果:

代码语言:txt
复制
目标: ['x']
值: [5]
-------------------------
目标: ['y']
值: []
-------------------------
目标: ['z']
值: ['hello']
-------------------------

在上述代码中,我们使用ast.walk()函数遍历语法树,并使用isinstance()函数判断节点类型。对于赋值节点,我们使用循环获取目标节点的名称和值节点的值。

此外,根据具体的场景和需求,你可以进一步扩展代码来处理更多类型的值节点。

关于AST模块的更多详细信息,你可以参考腾讯云的文档:Python AST模块

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

0629-6.2-如何使用CM API接口获取集群所有节点内存磁盘使用情况

,部分客户也有自己统一监控平台,需要将CM上监控指标集成到统一监控平台上,因此可以通过提供API接口获取监控指标,本篇文章Fayson主要介绍如何通过CM API接口获取集群所有节点内存磁盘使用情况...2 接口查找及说明 在Cloudera ManagerAPI列表中未找到一个比较合适接口来直接获取指定节点内存磁盘使用情况,最终在API列表中找到了获取时序数据接口,该接口可以通过传入tsQuery...写两条语句用于满足前面的需求: 获取集群所有节点内存使用情况: select physical_memory_total, physical_memory_used ?...获取集群所有节点磁盘使用情况: select total_capacity_across_filesystems,total_capacity_used_across_filesystems WHERE...2.在Cloudera Manager主机列表界面中显示内存、磁盘交换空间数据是由各个节点Agent实时推送并未写入数据库。

4.7K50
  • 如何导出python安装所有模块名称版本号到文件中

    Python 模块 概念 python模块是什么?简而言之,在python中,一个文件(以“.py”为后缀名文件)就叫做一个模块,每一个模块python里都被看做是一个独立文件。...模块可以被项目中其他模块、一些脚本甚至是交互式解析器所使用,它可以被其他程序引用,从而使用模块函数等功能,使用Python标准库也是采用这种方法。...注意:自定义模块命名一定不能系统内置模块重名了,否则将不能再导入系统内置模块了。...例如:自定义了一个sys.py模块后,再想使用系统sys模块是不能使用; 第三方开源模块:这部分模块可以通过pip install进行安装,有开源代码; 一般查看python下安装了什么包,我们可在命令行模式下输入...在另一台服务器上想部署相同包,只需运行: $ pip install -r requirements.txt 总结 到此这篇关于导出python安装所有模块名称版本号到文件中文章就介绍到这了,更多相关

    2.2K10

    前端AST详解,手写babel插件

    AssignmentExpression(赋值表达式节点):operator 属性表示一个赋值运算符,left right是赋值运算符左右表达式ArrayExpression(数组表达式节点):...,生成目标代码 sorucemap(即将ast转换成js代码)babel处理步骤:主要有三个阶段:解析(parse), 转换 (transform),生成(generate)。...因此这是bebel处理代码核心步骤,是我们讨论重点,主要使用@babel/traverse@babel/types模块。...generate 打印 AST目标代码并生成 sourcemap,用到@babel/generate模块。接下来我们来重点了解转换这一步,上面我们提到,转换第一步是遍历AST。...当访问者把它用于遍历中时,每当在树中遇见一个对应类型时,都会调用该类型对应方法。四、案例展示========从 babel7 开始,所有的官方插件主要模块,都放在了 @babel 命名空间下。

    23610

    前端AST详解,手写babel插件

    window.a对应AST如下:图片AssignmentExpression(赋值表达式节点):operator 属性表示一个赋值运算符,left right是赋值运算符左右表达式ArrayExpression...@babel/parser 解析源码得到AST@babel/traverse遍历 AST节点@babel/types用于构建AST节点判断AST节点类型@babel/generate 打印 AST,生成目标代码...因此这是bebel处理代码核心步骤,是我们讨论重点,主要使用@babel/traverse@babel/types模块。...generate打印 AST目标代码并生成 sourcemap,用到@babel/generate模块。接下来我们来重点了解转换这一步,上面我们提到,转换第一步是遍历AST。...当访问者把它用于遍历中时,每当在树中遇见一个对应类型时,都会调用该类型对应方法。四、案例展示从 babel7 开始,所有的官方插件主要模块,都放在了 @babel 命名空间下。

    49340

    python面试题-找到两个数组元素小于等于目标值target最大所有组合

    题目: 给定2个数组(不是有序),再给定一个目标值target,找到两个数组元素小于等于目标值target最大所有组合 示例一: 数组a 为[3, 8,5] 数组b 为[2, 1,4] 目标值...10 输出:(8,2)  因为 8+2<=10 示例二 数组a为 [5, 7, 2] 数组b为[4, 2, 1] 目标值10 输出为(5, 4), (7,2)因为5+4=7+2<=10 代码参考 """...作者:上海-悠悠 python QQ交流群:730246532 联系微信/QQ: 283340479 """ def target_function(a, b, target): target_map...else: if i+j == sum(target_map[-1]): # 如果新元素相加跟收集结果里面值相等...5, 7, 2], b=[4, 2, 1], target=10) print(','.join([str(i) for i in result2])) 运行结果 2022年第 11 期《python

    1.3K10

    如何使用PQ获取目录下所有文件夹名(不含文件子目录)

    今天想把之前发布Power BI示例文件文件夹做一个表出来,只获取该目录下所有文件夹名,并不包含其中各种文件子目录。 ? 因为每个文件夹中都包含多个文件,甚至还有子文件夹: ?...所以如果直接用“从文件夹获取数据”方式,PowerQuery会使用Folder.Files函数: ? Folder.Files会将所选目录下所有文件路径罗列出来: ?...以下是Folder.Contents说明: ? 这个就比较好了。它只返回所选目录下文件夹名和文件名,并不会返回子文件夹下文件。...这样我们就得到了根目录下所有文件夹名,和文件名。尤其是,空文件夹这里也出现了。 接下来就是从列表中只返回文件夹名。...再筛选TRUE行: ? 意思是查看属性,然后筛选那些是“目录”行。 这样,就将该目录下所有文件夹获取到了。

    7K20

    代码手术刀—自定义你代码重构工具

    ,通过事件解析引擎解析用户自定义事件并完成事件绑定,完成解析赋值以及事件绑定后进行视图渲染,最终将目标页面展示到屏幕。...回过头来看,如果我们要写一个工具,对整个代码工程所有类进行全量扫描,并且使用lombok来替换其中“没有特殊逻辑”gettersetter,需要哪些步骤。...,通过事件解析引擎解析用户自定义事件并完成事件绑定,完成解析赋值以及事件绑定后进行视图渲染,最终将目标页面展示到屏幕。...包括: 获取设置包声明 获取添加导入声明 获取添加类型声明 获取添加注释 使用访问者模式来遍历AST节点 4....04 工具使用方式 理解,首先 MCube 会依据模板缓存状态判断是否需要网络获取最新模板,当获取到模板后进行模板加载,加载阶段会将产物转换为视图树结构,转换完成后将通过表达式引擎解析表达式并取得正确

    12110

    一文看懂如何将VUE组件转换为微信小程序组件

    [2] babel-traverse:Babel 遍历器,所有的transformers都使用该工具遍历所有AST (抽象语法树),维护了整棵树状态,并且负责替换、移除添加节点。...我们可以 Babylon 一起使用来遍历更新节点。 [3] babel-generator:Babel 代码生成器。它读取AST并将其转换为代码。...通过以上转换之前转换之后代码 AST 对比我们明确了转换目标就是 ExportDefault 到 Component构造器转换,下面看一下我们是如何处理: 我们做了什么(在转换中进入到 ExportDefault...最后, 使用,Babel 代码生成器 Babel Generator 模块 读取 处理后 AST 并将其转换为代码。任务就完成了!...VUE 组件 JavaScript模块 methods 中赋值语句转换为小程序赋值语句处理 VUE 组件 JavaScript模块 外层对象,生命周期钩子函数处理与 CSS 模块简易处理

    4.2K10

    数据血缘分析-Python代码智能解析

    我们参考Pyflakes来实现以上功能,Pyflakes是Python一个代码分析包,用来分析代码,发现潜在代码问题,例如:引入但没有用到模块、变量创建但是没有使用。...查看Pyflakes源码,可以发现其进一步使用ast 模块,其用于生成编译 Python 代码抽象语法树,关于ast介绍可以进一步查看https://blog.csdn.net/ThinkTimes...更多语法树节点类型,可参考https://docs.python.org/3/library/ast.html 不同类型节点其属性不一样,通用属性有位置信息,例如col_offsetend_col_offset...针对所有python内置标识符(函数),将其赋值到字典self.scope里 for builtin in self.builtIns: self.addBinding(None, Builtin(...在该函数中,解析到具体引入包名,然后使用addBinding函数,检查这个节点属性是否在self.scope里,如果没有就新建这个,如果有则会根据python语法规则进行判断提示警告,例如是否是“

    1.8K41

    前端工程化在WMS 6.0中实践

    ,通过事件解析引擎解析用户自定义事件并完成事件绑定,完成解析赋值以及事件绑定后进行视图渲染,最终将目标页面展示到屏幕 前端工程国际化改造预估工期较长,主要原因是改造面临以下问题: 1.工作量大 6.0...,通过事件解析引擎解析用户自定义事件并完成事件绑定,完成解析赋值以及事件绑定后进行视图渲染,最终将目标页面展示到屏幕。...04 具体实现 4.1 依赖库介绍 4.1.1 glob nodeglob模块使用 *等符号, 来写一个glob规则,像在shell里一样,获取匹配对应规则文件,本次需要使用glob...children内部需要处理两种类型节点,type为5代表节点使用了插语法(INTERPOLATION),拿到内部代码后,按照标准js代码处理即可;type为1代表节点为元素(ELEMENT),需要继续作为...在使用工具时,通过简单配置即可检索指定项目指定路径下所有的 vue js 文件,并且支持按文件路径来记录校验结果并输出到 json 文件中。

    98010

    不一样JavaScript

    3.2.3 语法分析 语法分析也叫解析器,解析器会删除一些没有必要token(例如不完整括号),因此AST不是100%匹配源代码AST生成是根据文法节点类型定义构造出来。...在JavaScript语义分析阶段通常会进行ES语法转换,将AST中对应节点转换成目标ES程序节点对象并加以替换,这一步通常会使用Babel来进行,因为Babel具备成熟生态链,其插件能够满足大部分需求...,其目的方便后续使用节点查询算法对AST进行语法分析。...这里定义一个z变量并且赋值10,在AST里描述可以简化成4步 生成一个type为VariableDeclarationNode对象,用于标识这是一个变量申明语句 将kind属性赋值为const,用于标识这个变量申明使用...const关键字 使用type为Identifier类型节点来确定这个变量名称,文中为name: 'z' 因为赋值是Number类型10,所以使用type为NumeriLiteral类型节点对z

    46120

    Python 之父新发文,将替换现有解析器

    假设我们程序是这样: answer = 42 这句程序会被解析成三个标记符:NAME(是answer),‘=’ NUMBER(为 42)。...AST 对于那些想要检查(inspect)Python 代码第三方代码,也更加容易,它还通过被大众欢迎 ast 模块而公开。...这个模块还允许你从头构建 AST 节点,或是修改现有的 AST 节点,然后你可以将新节点编译成字节码。...后一项能力支撑起了一整个为 Python 语言添加扩展家庭手工业(译注:ast 模块Python 三方扩展提供了便利)。...(借助 parser 模块,解析树同样能面向 Python 用户开放,但它使用起来太麻烦了,因此相比于 ast 模块,它就过时了。)

    1.1K30

    Python之父发文,将重构现有核心解析器

    假设我们程序是这样: answer = 42 这句程序会被解析成三个标记符:NAME(是answer),‘=’ NUMBER(为 42)。...AST 对于那些想要检查(inspect)Python 代码第三方代码,也更加容易,它还通过被大众欢迎 ast 模块而公开。...这个模块还允许你从头构建 AST 节点,或是修改现有的 AST 节点,然后你可以将新节点编译成字节码。...后一项能力支撑起了一整个为 Python 语言添加扩展家庭手工业(译注:ast 模块Python 三方扩展提供了便利)。...(借助 parser 模块,解析树同样能面向 Python 用户开放,但它使用起来太麻烦了,因此相比于 ast 模块,它就过时了。)

    1K10

    深度辨析 Python eval() 与 exec()

    因此,掌握内置函数用法,就成了我们应该点亮技能。 在《Python进阶:如何将字符串常量转为变量?》这篇文章中,我提到过 eval() exec() ,但对它们并不太了解。...(PS:单个表达式并不意味着“简单无害”,参见下文第 4 节) globals 用于指定运行时全局命名空间,类型是字典,缺省时使用是当前模块内置命名空间。...原因与 Python 编译器有关,对于以上代码,编译器会先将 foo 函数解析成一个 ast(抽象语法树),然后将所有变量节点存入栈中,此时 exec() 参数只是一个字符串,整个就是常量,并没有作为代码执行...ast 模块 literal() 是 eval() 安全替代,与 eval() 不做检查就执行方式不同,ast.literal() 会先检查表达式内容是否有效合法。...关联阅读: Python 动态赋值陷阱 Python骚操作:动态定义函数 Python与家国天下 Python进阶:如何将字符串常量转为变量?

    2.9K00

    中高级前端开发需要掌握vue知识点

    更快速:利用 key 唯一性生成 map 对象来获取对应节点,比遍历方式更快参考:前端vue面试题详细解答computed watch 区别运用场景?...computed: 是计算属性,依赖其它属性,并且 computed 有缓存,只有它依赖属性发生改变,下一次获取 computed 时才会重新计算 computed ;watch:...}}如何从真实DOM到虚拟DOM涉及到Vue中模板编译原理,主要过程:将模板转换成ast 树,ast 用对象来描述真实JS语法(将真实DOM转换成虚拟DOM)优化树将ast 树生成代码你有使用过...$set 实现原理是:如果目标是数组 ,直接使用数组 splice 方法触发相应式;如果目标是对象 ,会先判读属性是否存在、对象是否是响应式,最终如果要对属性进行响应式处理,则是通过调用 defineReactive...,移动到旧后之后)旧后与新前(尾与头比,此种发生了,涉及移动节点,那么新前指向节点,移动到旧前之前)Vue中如何扩展一个组件此题属于实践题,考察大家对vue常用api使用熟练度,答题时不仅要列出这些解决方案

    44730

    2022必会vue高频面试题(附答案)

    更快速:利用 key 唯一性生成 map 对象来获取对应节点,比遍历方式更快如何从真实DOM到虚拟DOM涉及到Vue中模板编译原理,主要过程:将模板转换成ast 树,ast 用对象来描述真实JS语法...$set 实现原理是:如果目标是数组,直接使用数组 splice 方法触发相应式;如果目标是对象,会先判读属性是否存在、对象是否是响应式,最终如果要对属性进行响应式处理,则是通过调用 defineReactive...然后,AST会经过generate(将AST语法树转化成render funtion字符串过程)得到render函数,render返回是VNode,VNode是Vue虚拟DOM节点,里面有(标签名...destroyed:实例销毁之后调用,调用后,Vue实例指示所有东西都会解绑,所有事件监听器所有子实例都会被移除每个生命周期内部可以做什么?...$set 实现原理是:如果目标是数组,直接使用数组 splice 方法触发相应式;如果目标是对象,会先判读属性是否存在、对象是否是响应式,最终如果要对属性进行响应式处理,则是通过调用 defineReactive

    2.8K40

    有点儿神奇,原来vue3setup语法糖中组件无需组册因为这个

    接着就是遍历AST抽象语法树内容,如果发现当前节点是一个import语句,就会将该import收集起来放到ctx.userImports对象中(具体如何收集接下来会讲)。...遍历AST抽象语法树,如果当前节点类型是一个element元素节点,比如div节点、又或者这种节点。 node.tag就是当前节点名称,如果是普通div节点,他就是div。...如果是节点,他就是Child。...然后再去递归遍历template模块对应AST抽象语法树,看import导入变量是否在template中使用,并且赋值给isUsedInTemplate属性。...遍历setupBindings对象ctx.userImports对象中收集所有顶层绑定,生成setup函数中return对象。

    9210

    看不懂来打我,vue3如何将template编译成render函数

    这里模版AST抽象语法树结构template模块代码结构是一模一样,所以说模版AST抽象语法树就是对template模块结构进行描述。...如下图: 从上图中我们可以看到此时compiler变量为undefined,source变量为template模块代码,inAST为由template模块编译而来AST抽象语法树。...由于这里compiler变量为undefined,所以compiler会被赋值为CompilerDOM。而CompilerDOM就是@vue/compiler-dom包中暴露所有内容。...执行transform函数,使用合并后nodeTransforms中所有转换函数处理AST抽象语法树中所有node节点使用合并后directiveTransforms中转换函数对会生成props...getBaseTransformPreset函数返回是一个数组,对返回数组进行解构,数组第一项赋值给nodeTransforms变量,数组第二项赋值给directiveTransforms变量

    19010
    领券