来自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/