Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python如何调用C?_Python_C_Dynamic Linking - Fatal编程技术网

Python如何调用C?

Python如何调用C?,python,c,dynamic-linking,Python,C,Dynamic Linking,Python究竟如何调用C库?例如,我认为Tensorflow主要是用C编写的,但可以从Python中使用。我正在考虑用我自己的(解释的)编程语言(用Go编写,但我认为这将是一个类似的过程)实现类似的东西 当Python程序调用C函数时会发生什么?我在考虑RPC或DLL,但两者似乎都不太可能。cPython有两种调用C代码的主要方法:要么加载共享库并调用其符号,要么将C代码打包为Python二进制模块,然后从Python代码中调用它们,就好像它们是普通的Python模块一样,这就是标准库中高性能

Python究竟如何调用C库?例如,我认为Tensorflow主要是用C编写的,但可以从Python中使用。我正在考虑用我自己的(解释的)编程语言(用Go编写,但我认为这将是一个类似的过程)实现类似的东西


当Python程序调用C函数时会发生什么?我在考虑RPC或DLL,但两者似乎都不太可能。

cPython有两种调用C代码的主要方法:要么加载共享库并调用其符号,要么将C代码打包为Python二进制模块,然后从Python代码中调用它们,就好像它们是普通的Python模块一样,这就是标准库中高性能内容的实现方式-例如

使用
ctypes
模块加载共享库并从中调用函数相当简单,您可以在这里找到许多示例:

将您的C代码打包为二进制Python模块需要大量的样板文件和对引用计数、空指针等细节的仔细关注,本文对此进行了说明:


有几个库可以自动执行该过程并为您生成绑定代码。一个例子是
boost.python

为什么不使用DLL?这就是正在发生的事情。请看这里:Python语言?Python解释器?Python字节码解析器?在屏幕上执行某些操作之前,它不再是“Python”,而只是一个程序调用另一个程序。Python的C(和C++)接口有很好的文档记录。不,我认为它不是用C构建的,而是使用纯Pythonscripts@Simon哦,肯定是。您链接的python代码使用了一些导入技巧来透明地加载它的C部分。我的错误。也许在你的答案中加入链接以避免将来的混淆:)