Ned Batchelder back in 12008的帖子声称Python代码对象在Python字节码文件中编组:
[...]文件的其余部分只是编译源文件所产生的代码对象
marshal.dump()
的输出。
这可能适用于在Python级别创建的代码对象,但这些代码对象究竟是如何在C级编组的?
我查看了Python code objects(version 3.5)的文档,对它们的说法不多,当然也没有提供有关如何编组的信息:
用于描述代码对象的对象的C结构。此类字段可能随时更改。
我也试过看一下Python code object's source code,但实际上找不到任何能回答我问题的内容。
如果使用C级结构实现Python代码对象 - 我相信它们是 - 那么它们如何被编组到字节码文件中?就我所做的研究而言,C没有为编组或任何第三方库提供内置的方法吗?
如果代码对象在C级编组,它究竟是如何完成的?如果没有, 如何编码到字节码中?
1 我特别注意到了这个日期,因为这个细节可能在Python版本之间发生了变化。
答案 0 :(得分:2)
这可能适用于在Python级别创建的代码对象,但这些代码对象究竟是如何在C级编组的?
使用marshal.dump
,或者可能是其中一个相关界面,例如marshal.dumps
。
它不像“委托给某些C标准库函数”那么简单;如果要查看每个细节,编组和解组实现包含1820-line file您必须阅读的内容。根据Python特定的数据结构和功能,大多数对象树遍历和序列化都需要从头开始编写。