Python的C 擴充套件

2021-06-15 22:11:47 字數 2025 閱讀 9847

python

以其強大的功能、簡潔的語法、出色的效率成為當前領先的

oo動態語言。在

python

中,所有內容都是物件,包括方法。

python

的強大的原因之一是其可以用

c/c++

進行方便地擴充套件,它的許多高階功能也是通過這種方式獲得的。使用

c++進行擴充套件,目前比較流行的有兩種方式:一種為

swig

,還有一種為

boost::python

庫。我們知道,在如今各種語言不斷湧現的今天,它們之間能否互操作,尤其是和主流的高階語言之間的互操作性,是決定其前景的重要因素之一。每種語言都有自己的型別系統和記憶體管理的方式,因此不同語言之間要互動,就需要完成不同型別之間的轉換和物件生命週期的跟蹤管理。

python

的c++

擴充套件主要涉及兩方面的內容:匯出方法表和型別轉換。

swig

被稱為通用的語言粘合劑。它採用了一種獨特的方法來解決不同語言間的互操作問題,

python

的c++

擴充套件只是它的一種應用。具體到

python

的c++

擴充套件上,除了你的

c++**外,你通常只需要編寫乙個轉換用的語法檔案(擴充套件名為

.i),類似下面的格式:

/* file : example.i */

%module example

%

%

%include"std_list.i"

namespace std

/* let's just grab the original header file here */

%include "example.h"

%inline %

pshape ref(circle* x)

%}

swig

是乙個非常有前景的技術。它聲稱已經支援絕大部分的

c++特性,也支援

stl的常用容器。不過因為它的通用性,在效能上和對語言特性的支援上都不及下面的

boost

提供的python

庫。在實際應用時,使用

swig

遇到了stl::list

無法轉換成功的問題。並且,上面描述的只是

python

到c++

的呼叫,如果要在

c++中呼叫

python

,似乎swig

無法做到。這些讓我不得不轉求其它方法。

boost

是乙個採用模板技術封裝的龐大的

c++標準庫擴充套件,其中,最新的

1.33.1

版本中強化了對

python

的支援,技術已經比較成熟。它封裝了完整的

python

基本型別,並且提供了一系列的巨集便於完成匯出函式表,使得我們可以方便地在

python

和c++

之間進行呼叫。在實際使用中,還沒有遇到任何問題。詳細內容可以訪問

其它資源:

1.python for windows extensions

:2.python and com

:3.ironpython

(.net

上的python

):4.swig

官方**:

5.python

官方**:

6.一篇不錯的介紹

swig for python extensions in c++

的文章:

接下來的工作,便由

swig

自動完成,即:根據語法檔案的指引,在你的

c++類和

python

之間產生乙個適配的

c檔案,最後編譯成

python

擴充套件動態庫

(*.pyd)

。當我們在

py中呼叫該

pyd中的物件和方法時,該適配檔案作為乙個橋梁,將呼叫傳遞到

c++的原始**中。

c 擴充套件python

include int fact int n pyobject warp fact pyobject self,pyobject args result fact n return py buildvalue i result static pymethoddef examplemethods ex...

Python的C擴充套件問題

最近看python核心程式設計第二版,關於python的c擴充套件。書隨帶的源 應該是不會有什麼 錯誤的,朋友在linux下跑完全無障礙,還是linux 好啊 有以下兩個檔案,第乙個是python包裝過的c語言檔案,第二個是編譯的setup.py檔案。系統環境是win7ultimate。python...

C語言擴充套件Python

python具有很好的開發靈活性,最大的特點是c語言可以對python進行擴充套件,目前工作中正在進行相關的開發,第一篇文章作為基礎.實現c函式,用python api封裝,實現倆個功能,1.say hello,列印hello world 2.calc pv,做加法用算.以下為使用方法 01pyth...