~~~~~~~~~~~p1~~~~~~~~~~~~~
首先,先用c寫乙個簡單的函式
show.c
#include這個函式是乙個最簡單的helloworld函式,幾乎所有程式語言教材都會以她作為第乙個例子(跑題了。。。)void showstring()
我們需要做的是在乙個python指令碼中呼叫這個函式
show.py
#!/usr/bin/env python首先我們編譯show.c檔案import ctypes
dlls = ctypes.cdll.loadlibrary
libs = dlls("./show.so")
libs.showstring()
gcc -shared -fpic show.c -o show.so
這樣得到乙個 .so的檔案,注意這個檔案的檔名必須和show.py裡呼叫名字一樣。。。
然後在執行python指令碼,整個過程如下
jd@jd-desktop:~/163/p1$ gcc -shared -fpic show.c -o show.so
jd@jd-desktop:~/163/p1$ ls -l
總用量 20
-rw-rw-r-- 1 jd jd 84 10月 4 16:55 info.txt
-rw-rw-r-- 1 jd jd 66 10月 4 16:56 show.c
-rw-rw-r-- 1 jd jd 110 10月 4 16:59 show.py
-rwxrwxr-x 1 jd jd 8009 10月 4 17:03 show.so
jd@jd-desktop:~/163/p1$ python show.py
hello world.
jd@jd-desktop:~/163/p1$
~~~~~~~~~~~p2~~~~~~~~~~~`
我們可以嘗試下稍微複雜的函式
add.c檔案
#includeadd.py檔案int add(int x , int y)
#!/usr/bin/env pythonadd.c檔案是乙個簡單的加法函式,引數為兩個int,函式返回這個個引數之和import ctypes
dlls = ctypes.cdll.loadlibrary
libs = dlls("./adds.so")
print libs.add(5,4)
和第一部分差不多,首先編譯add.py檔案,然後執行python指令碼
jd@jd-desktop:~/163/p1/2$ gcc -shared -fpic add.c -o adds.so
jd@jd-desktop:~/163/p1/2$ ls -l
總用量 16
-rw-rw-r-- 1 jd jd 59 10月 4 17:13 add.c
-rw-rw-r-- 1 jd jd 106 10月 4 17:13 add.py
-rwxrwxr-x 1 jd jd 7853 10月 4 17:14 adds.so
jd@jd-desktop:~/163/p1/2$ python add.py 9
jd@jd-desktop:~/163/p1/2$
~~~~~~~~p3~~~~~~~~
看樣子似乎不錯,那麼我們繼續吧
countarray.c
#include這是乙個很普通的求陣列和的函式,傳入乙個int陣列的首個元素位址和陣列長度,然後球這個陣列所有元素的和void countarray(int* pt int len)
於是,按照上面2個部分,我們自然想到了寫乙個countarray.py然後編譯c的檔案,執行python指令碼
countarray.py
#!/usr/bin/env python請允許我使用這樣乙個表情。。import ctypes
dlls = ctypes.cdll.loadlibrary
libs = dlls("./countarray.so")
libs.countarray(/*手動滑稽*/,10)
我想你也看到問題了,對於python來說,他的型別和c有很大不同,如果乙個c函式不需要引數,或者引數是python裡存在的型別,那在python裡直接呼叫一切ok,但當這個型別python中不存在的時候,你就會發現無法給呼叫的(c/c++)函式乙個合適的引數
對於函式返回值也有同樣的問題。。。
python 呼叫 C C 詳解
接下來將簡單介紹python如何呼叫c和c 包括呼叫整型,陣列等情況。c函式返回整型int c test.c include include int func int a,int b 編譯成so包 gcc o testpycll 64.so shared fpic test.cpython impo...
Python呼叫c c 函式(1)
python開發效率高,執行效率低。而c c 恰恰相反。因此在python指令碼中呼叫c c 的庫,對python進行擴充套件,是很有必要的。使用python api,需要安裝python dev。test.cpp檔案如下 include 6 python.h 包含python的標頭檔案 1 c c...
C C 呼叫python(新手必看)
目錄 1.背景介紹與程式設計環境 2.完整例項演示 3.問題集錦 4.總結 5.參考鏈結 背景介紹 近年來,python語言憑藉著自身語言的簡單易學 相對於其他程式語言來說 及其功能強大的函式庫 還有其他優點 受到許多程式設計愛好者的青睞,同時十分廣泛的用於人工智慧演算法程式設計中。c c 語言是基...