SWIG是Simplified Wrapper and Interface Generator的縮寫。是Python中調(diào)用C代碼的另一種方法。在這個方法中,開發(fā)人員必須編寫一個額外的接口文件來作為SWIG(終端工具)的入口。
Python開發(fā)者一般不會采用這種方法,因為大多數(shù)情況它會帶來不必要的復(fù)雜。而當(dāng)你有一個C/C++代碼庫需要被多種語言調(diào)用時,這將是個非常不錯的選擇。
示例如下(來自SWIG官網(wǎng))
example.c
文件中的C代碼包含了不同的變量和函數(shù)
#include <time.h>
double My_variable = 3.0;
int fact(int n) {
if (n <= 1) return 1;
else return n*fact(n-1);
}
int my_mod(int x, int y) {
return (x%y);
}
char *get_time()
{
time_t ltime;
time(<ime);
return ctime(<ime);
}
編譯它
unix % swig -python example.i
unix % gcc -c example.c example_wrap.c \
-I/usr/local/include/python2.1
unix % ld -shared example.o example_wrap.o -o _example.so
最后,Python的輸出
>>> import example
>>> example.fact(5)
120
>>> example.my_mod(7,3)
1
>>> example.get_time()
'Sun Feb 11 23:01:07 1996'
>>>
我們可以看到,使用SWIG確實達(dá)到了同樣的效果,雖然下了更多的工夫,但如果你的目標(biāo)是多語言還是很值得的。