1.Python与C交互概述
Python与C/C++交互的三种方式Python扩展:在Python程序中调用C/C++编写的库
Python嵌入:在C/C++程序中调用Python程序
Python调用:Python和C间以程序级别互相调用
Python与C/C++交互的价值整合Python高产与C/C++高效的优势
利用C或Python已有功能服务彼此的程序
Python作为粘性脚本语言整合或被整合到各类独立程序
Python扩展:在Python程序中调用C/C++编写的库目的:提升关键代码性能、引入C语言成熟功能库
方式:Cython、SWIG、ctypes、CFFI
形式:Python为主程序,C通过.dll/.so形式使用
Python嵌入:在C/C++程序中调用Python程序目的:利用Python高产、引入Python成熟功能库
方式:Python/C API
形式:C/C++为主程序,Python通过源文件形式使用
Python调用:Python和C间以程序级别互相调用目的:模块间功能互用,以功能使用为目标
方式:子进程或线程方式,即subprocess
形式:C/C++和Python都是独立程序
小结:Python与C/C++交互的三种方式Python扩展:十分重要,Python程序员必学必会
Python嵌入:一般重要,Python程序员可以掌握
Python调用:比较重要,Python程序员应该掌握
2.Python的扩展方法目的:提升关键代码性能、引入C语言成熟功能库
方式:Cython、SWIG、ctypes、CFFI
形式:Python为主程序,C通过.dll/.so形式使用
Cython:实现Python扩展的一种语言,第三方库思路:通过一种简单的语言来实现Python和C的接口
方式:采用了Pyrex语法形式
结果:采用C数据类型的Python编程,实现混合编程
SWIG:一个将C/C++与脚本语言相整合的编译器,独立工具思路:通过一个编译器来实现Python和C的接口
方式:纯C/C++编程,通过编写接口变成Python模块
结果:独立C和Python编程,重点在于编写接口(描述)
ctypes:调用DLL或共享库的Python功能函数库,标准库API思路:通过一个Python标准库实现Python扩展
方式:C语言功能编为.dll或.so库,加载库及调用函数,API
结果:C语言独立编程,Python使用库调用接口函数
CFFI:在Python中直接使用C函数的方式,第三方库思路:类似ctypes,使用API扩展C程序,也可以直接混合编程
方式:关注C函数的访问接口,而不是库函数,构建API
结果:C语言独立编程,Python用CFFI扩展,最小学习代价
小结:在Python程序中调用C/C++编写的库Cython:采用C数据类型的Python编程
SWIG:将C转变为Python模块的接口编译工具
ctypes:调用.dll或.so的标准库API
CFFI:调用C函数及混合编程的第三方库API
3.Python的嵌入方法
Python嵌入:在C/C++程序中调用Python程序目的:利用Python高产、引入Python成熟功能库
方式:Python/C API
形式:C/C++ 为主程序,Python通过源文件形式使用
Python/C API:Python嵌入的主要接口嵌入Python语句:嵌入一个或多个Python语句
嵌入Python脚本:嵌入一个或多个Python文件
Python/C API需要加载Python解释器及加载Python语句和脚本
Python/C API:Python嵌入的主要接口Python/C API 是一组能够在C语言下执行的类型定义和函数
头文件:Python.h
函数:加载Python解释器、嵌入Python语句及脚本、数据类型转换等
加载Python解释器:
4.Python的调用方法
Python调用:Python和C间以程序级别互相调用目的:模块间功能互用,以功能使用为目标
方式:子进程或线程方式,即subprocess
形式:C/C++和Python都是独立程序
在Python中调用C语言程序使用Python的subprocess模块
步骤1:准备好C语言编写的待调用程序
步骤2:使用subprocess模块调用并执行程序
subprocess模块
在C中调用Python程序使用C的system()函数
步骤1:准备好Python编写的待调用程序
步骤2:使用system()函数调用并执行程序
system()函数
小结:Python和C间以程序级别互相调用Python调用C :subprocess模块
C调用Python:system()函数