Python3 中compile_command/compile编译可执行语句(或文件)、parser剖析器创建可执行代码、exec/eval动态执行语句的深入分析

Python提供了在代码中动态执行代码的功能。

 

一.exec/eval动态执行语句

exec、eval动态执行语句。exec主要用在计算方面(无返回结果),eval主要用在比较方面(返回结果)。
(特别注意:如果是将exec或者eval定义在对象内部,并且在exec内部定义了变量,则只能在他们内部访问变量才有效。就像是加了一个外壳。)


1.测试方法中执行exec与eval:

注:如果在exec内部定义的变量与外部变量同名,则给内部变量赋值之后,在内部将覆盖外部变量,在内部访问或者调用的也将是内部变量。exec()外部调用同名的外部变量,不影响原始外部变量的值。

内部变量进行计算与赋值操作之一:

内部变量进行计算与赋值操作之二:

2.类内部的方法外部操作exec:

注:在类内部并且在方法外部使用exec,依旧exec内部赋值的同名gInt变量不会是类中的全局变量gInt,也就是说在exec中无法给外部的变量赋值。(除非是在python shell命令行中直接调用,这个与项目中操作exec无关。)

 

二. compile_command/compile编译可执行语句(或文件)

1.compile编译动态执行文件(或者多语句)为代码对象
官方帮助文档原文:Compile the source into a code or AST object. Code objects can be executed by:func:exec

2.code 模块提供了一些用于模拟标准交互解释器行为的函数.
compile_command 与内建 compile 函数行为相似, 但它会通过测试来保证你传递的是一个完整的 Python 语句
compile_command 与compile都不计算结果,但是如果执行的语句错误compile会返回一个错误,而compile_command不会。
如果执行成功,他们返回的对象类型是一样的。

 

三. parser剖析器创建可执行代码

parser会将代码块构造成一个整体来运行,而且也是更快的。
官方帮助文档原文:
The parser module provides an interface to Python’s internal parser and byte-code compiler.
The primary purpose for this interface is to allow Python code to edit the parse tree of a Python expression and create executable code from this.
This is better than trying to parse and modify an arbitrary Python code fragment as a string because parsing is performed in a manner identical to the code forming the application.
It is also faster.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值