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

2024-09-27 20:16:03 发布

您现在位置:Python中文网/ 问答频道 /正文

Ned Batchelder back in 12008的帖子声称Python代码对象是在Python字节码文件中封送的:

[...] The entire rest of the file is just the output of marshal.dump() of the code object that results from compiling the source file.

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

我查看了Python code objects(version 3.5)的文档,但对它们的描述不多,而且肯定没有提供关于它们如何编组的信息:

The C structure of the objects used to describe code objects. The fields of this type are subject to change at any time.

我也试着看一下Python code object's source code,但是没有找到任何能回答我问题的东西。在

如果Python代码对象是在C级别使用结构实现的(我相信是这样的),那么如何将它们封送到字节码文件中呢?就我所做的研究而言,C没有提供用于编组的内置方法,也没有提供任何第三方库?在

如果代码对象是在C级别封送的,它到底是如何完成的?如果不是,它们是如何编码到字节码中的?在

1我特别注意到了这个日期,因为这个细节可能在Python版本之间发生了变化。在


Tags: 文件oftheto对象代码source字节
1条回答
网友
1楼 · 发布于 2024-09-27 20:16:03

This may apply to code objects created at the Python level, but how exactly are these code objects marshalled at the C level?

使用marshal.dump,或者可能是{}之类的相关接口之一。在

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

相关问题 更多 >

    热门问题