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...