python - python Standrad lib 如何调用 C 或 C++?

标签 python c interpreter cpython

来自cpython的“time.py”中的函数几乎只是“传递”定义。我猜其功能的实现在“lib/python2.7/lib-dynload/time.so”中,所以我想知道cpython解释器如何调用“.so”文件?我知道ctypes,但我找不到cpython中的“time”模块在哪里使用它。

最佳答案

简单的回答是,Python 为 C 程序提供了一个 API(Python / C API),它允许人们在 C 代码中定义/实例化 Python 对象,包括函数(请参阅 extending Python with C)。有一个方法叫 Py_InitModule (及其变体),这使得在 C 代码中实例化 Python 模块、注册方法定义以及向其设置/添加字段成为可能。

就 Python 如何加载“time.so”而言,它可能使用 dlopen 来实现。 C 函数,允许在运行时动态打开库(或者,在 Windows 上,等效的 LoadLibrary )。使用这种方法,可以检索具有特定名称的函数(例如,Python 可以强制任何实现 Python 模块的“.so”文件必须提供具有特殊签名的初始化函数),然后调用它,从而允许初始化函数来注册各种定义。

关于python - python Standrad lib 如何调用 C 或 C++?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31497444/

相关文章:

c - DNS 客户端不接受 DNS 响应

c++ - Bison/Flex Concat 字符 *

python - 为什么python类方法与其对象方法不同但它们都有相同的id?

python - Selenium Python : Check that JS variable is true

python - 从 Python 中的随机数列表中过滤质数的最有效方法

python - 在带有python2.6的windows7上使用python dragonfly的问题

c - 不同的可能程序输出?

c++ - 变量 + 值宏扩展

c - brainfuck 解释器的优化

c - 字节码如何才能更快?