2016-11-05 62 views
0

在Python(CPython)中,我们可以导入模块: import module和模块可以只是*.py文件(带有python代码)或者模块可以是用C/C++编写的模块(可以扩展python)。所以,一个这样的模块只是编译目标文件(如Unix上的*.so/*.o)。C/C++模块与python模块。

我想知道它是如何完全由解释器执行的。

我认为python模块被编译成字节码,然后它会被解释。在来自这样的模块的C/C++模块功能的情况下,只是执行。所以,跳转到地址并开始执行。

如果我错了,请纠正我/请多说一些。

+0

我很好奇,如果有任何实际的原因,你想知道底层机制? – Evert

+0

我确信内部知识有助于成为更好的程序员,您怎么看? – Gilgamesz

回答

3

当你导入一个C扩展时,python使用该平台的共享库加载器来加载库,然后如你所说跳转到库中的一个函数。但是你不能加载任何库或以这种方式跳转到任何函数。它只适用于专门为支持python而实现的库,以及由库作为python对象导出的函数。该lib必须理解python对象并使用这些对象进行通信。

或者,您可以使用外部函数库(如​​)来加载库并将数据转换为数据的C视图以进行调用,而不是导入。