python 3的字节码操作(byteplay)库

byteplay3的Python项目详细描述


byteplay允许您将python代码对象转换为易于使用的等效对象,并允许您将这些对象转换回python代码对象。它有助于在python函数上应用转换,也有助于学习python字节码的复杂性。这个版本适用于Python3.4和3.5。

有关完整文档,请参阅位于
https://github.com/tallforasmurf/byteplay/blob/master/about.md

关于byteplay
----

byteplay3是一个模块,可以让您轻松地使用python字节码。
基本思想很简单:定义一个名为code的新类型,它等价于
对于python代码对象,但是代码对象与python代码对象不同,
很容易玩。任何python代码对象都可以转换为
代码对象,反之亦然,不会丢失任何重要信息。
在代码对象中,字节码指令用
易于检查和修改的方式。

兼容性
--

这个模块,byteplay3,是基于noam raph的原始版本,noam raph
仍然可以从PYPI获得。如果你有teplay使用的代码
python 2,只需更改导入行即可迁移到python 3
读取“from byteplay3 import*”。对于轻微的不兼容,请参见
“关于”上面链接的文件。当然你会发现
python 3字节码中的不兼容性,这一点已经有了很大的改变。

一个简单的例子
------

从一个愚蠢的函数开始,将其代码转换为代码对象并显示:

>>>定义f(a,b):
…打印(A,B)

>>>;f(3,5)
35
>>>>来自byteplay3导入*
>>>将函数f的代码对象转换为代码对象
>>>;c=代码。来自代码(f.\u代码)

<;byteplay3.code对象位于0x1030da3c8>;
>>gt;显示代码对象中的字节码元组
>>gt;打印(C.代码)
2 1加载全局打印
2快速加载
3快速加载
4调用函数2
5件上衣
6荷载系数无
7返回值

好了,现在我们开始玩吧!假设我们想改变函数,让它打印
按相反顺序排列的参数。为此,我们将插入一个rot-two操作码
将两个参数加载到堆栈后。(即,在
加载快速B并在调用函数2之前:

>;>;C.代码[4:4]=[(旋转二,无)]

然后用新对象替换函数f中的code对象:


>>>华氏度(3,5)
5 3

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
将firebase中的对象添加到列表中的java问题   java文件I/O和异常   为泛型队列类生成toString()方法时出现java逻辑错误   java如何在使用对象映射器从Json字符串反序列化到对象时跳过映射的映射   多线程Java:如何使用线程和用户输入显示奇数和偶数   java订阅主题。MQTT   只能识别CR LF的java扫描程序   java如何从任务栏隐藏swing窗体图标?   Java将类型化列表转换为数组   同一进程的多个实例的java独立日志?   java如何在触发器的帮助下更新不同sql表中的行   更改ArrayList时不更新ArrayList和ListView的java Android阵列适配器   java在完成另一个任务后执行一个任务   性能如何使图像生成在Java上可伸缩?