如何在C级编组Python代码对象?

时间:2016-12-28 05:18:37

标签: python object python-3.5 bytecode

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版本之间发生了变化

1 个答案:

答案 0 :(得分:2)

  

这可能适用于在Python级别创建的代码对象,但这些代码对象究竟是如何在C级编组的?

使用marshal.dump,或者可能是其中一个相关界面,例如marshal.dumps

它不像“委托给某些C标准库函数”那么简单;如果要查看每个细节,编组和解组实现包含1820-line file您必须阅读的内容。根据Python特定的数据结构和功能,大多数对象树遍历和序列化都需要从头开始编写。