本文目錄一覽:
python擴展的c代碼在哪裡寫
在哪裡寫都可以啊,重要的是編譯過程。給你介紹下編譯過程吧。
在windows和linux下面,對C擴展的編譯方法是不一樣的,我們先來看windows版的。
我們用C實現一個簡單的加法。
首先新建一個文件add.c,代碼如下:
#include Python.h;
static PyObject* add(PyObject *self, PyObject *args);
//一定聲明為static,把他們限制在這個文件範圍里。 幾乎所有的參數都是PyObject類型,在python,每個東西都是object。
static PyObject* add(PyObject* self, PyObject* args)
{
int x=0 ;
int y=0;
int z=0;
if (! PyArg_ParseTuple(args, “i|i”, x, y))
return NULL;
/*第一個參數是self,這個是python用的, 每個函數都要有。我們暫時不管。args是一個參數列表。她把所有的參數都整合成一個string。所以
我們需要從這個string里來解析我們的參數。PyArg_ParseTuple來完成這個任務。第一個參數是args, 就是我們要轉換的參數。第二個是格式符號。
“s”代表是個string。 從args里提取一個參數就寫”s”, 兩個的話就寫”s|s”, 如果是一個string,一個int,就寫”s|i”, 和printf差不多。第三個
參數就是提取出來的參數放置的真正位置。必須傳遞這個參數的地址。對於add, 他將提取兩個參數。分別是x和y。*/
z=x+y;
return Py_BuildValue(“i”, z);
/*調用完之後我們需要返回結果。這個結果是c的type或者是我們自己定義的類型。必須把他轉換成PyObject, 讓python認識。這個用Py_BuildValue
來完成。他是PyArg_ParseTuple的逆過程。他的第一個參數和PyArg_ParseTuple的第二個參數一樣, 是個格式化符號。第三個參數
是我們需要轉換的參數。Py_BuildValue會把所有的返回只組裝成一個tutple給python。*/
}
static PyMethodDef addMethods[] =
{
{“add”, add, METH_VARARGS, “Execute a shell command.”},
{NULL, NULL, 0, NULL}
};
/*這個是一個c的結構。他來完成一個映射。 我們需要把我們擴展的函數都映射到這個表裡。表的第一個字段是python真正認識的。是python 里的方法名字。 第二個字段是python里的這個方法名字的具體實現的函數名。 在python里調用add, 真正執行的是用c寫的add函數。第三個字段是METH_VARARGS, 他告訴python,add是調用c函數來實現的。第四個字段是這個函數的說明。如果你在python里來help這個函數,將顯示這個說明。相當於在python里的函數的文檔說明。*/
PyMODINIT_FUNC initadd()
{
Py_InitModule(“add”, addMethods);
}
/*注意,這個函數的名字不能改動。 必須是init+模塊名字。 我們的模塊名字是add。所以這個函數是initadd()。
這樣python在導入add 的模塊時候,才會找到這個函數,並調用。這個函數調用Py_InitModule來將模塊名字和映射表結合在一起。 他表示,add這個模塊使用addMethods這個映射表。python應該這樣導入我們的module的.*/
新建一個setup.py,內容如下:
from distutils.core import setup, Extension
module1 = Extension(‘add’, sources = [‘add.c’])
setup (name = ‘PackageName’, version = ‘1.0’, description = ‘This is a demo package’, ext_modules= [module1])
組建:(由於我的機器上裝了mingw,所以指定了mingw32。默認的編譯器是vs2008。參考:
python setup.py build –compiler=mingw32
執行後會在當前目錄生成一個build目錄及文件:
build\lib.win32-2.6\add.pyd
將add.pyd拷貝到當前目錄,並寫一個測試文件test.py,代碼如下:
import add
print add.add(3,4)
執行一下,輸出為7
OK,基本上就是如此了。
在linux下的話,會有少許不同.
即直接用makefile將add.c編譯成.so,python可以直接import,makefile代碼如下:
PYLIB = /usr/bin
PYINC = /usr/include/python2.6
all: add.c
gcc add.c -g -I$(PYINC) -shared -L$(PYLIB) -lpython2.6 -o add.so
clean:
rm -f add.so
用同樣的測試代碼,可以測試通過。
如何在python中添加自定義模塊
通過文件進行設置
在Python的安裝目錄下,找到 \Lib\site-packages 文件夾,在該文件夾下新建一個以.pth為後綴名的文件,編輯文件,內容為要添加的庫路徑。(我的文件名命名為..pth)。添加路徑示例:文件內容寫入要引用的庫路徑
步驟1:建立文件,可以首先建立一個文本文檔,寫下路徑如D:\\Python\\mulib
步驟2:保存文檔時,將文件類型選為所有,文件名為 setpath.pth。文件名為什麼無所謂,主要是只有當文檔類型選為所有,才可以定義文件類型為.pth
步驟3:將保存好的文件放在Python的site-packages文件夾中就完成了。
python的數據類型有哪些?
第一種:整數
python可以處理任意大小的整數,當然包含負整數,在python程序中,整數的表示方法和數學上的寫法一模一樣,比如:1,100,-8080,0,等。
計算機由於使用二進制,所以有時候用十六進制表示整數比較方便,十六進制用0x前綴和0-9,a-f表示,比如:0xff00。
第二種:浮點數
浮點數也就是小數,之所以稱為浮點數,是因為按照科學計數法表示時,一個浮點數的小數點位置是可變的。浮點數可以用數學寫法,比如1.23,3.15,-9.01等。但是對於很大或者很小的浮點數,就必須用科學計數法表示,把10用e替代,1.23×10^9就是1.23e9。
整數和浮點數在計算機內部存儲的方法是不同的,整數運算永遠是精確的,而浮點數運算則可能會有四捨五入的誤差。
第三種:字符串
字符串是以“或”括起來的任意文本,比如’abc’,’xyz’等。請注意,“或”本身只是一種表示方式,不是字符串的一部分,因此,字符串’abc’只有a,b,c這3個字符。
第四個:布爾值
布爾值和布爾代數的表示完全一致,一個布爾值只有True、False兩種值,要麼是True,要麼是False,在python中,可以直接用True、False表示布爾值,也可以通過布爾運算計算出來。
布爾值可以用and、or或not運算。
and運算是與運算,只有所有都為True,and運算結果才是True。
or運算是或運算,只要其中有一個為True,or運算結果就是True。
not運算是非運算,它是一個單目運算符,把True變成False,False變成True。
第五個:空值
空值是python里一個特殊的值,用None表示。None不能理解為0,因為0是有意義的,而None是一個特殊的空值。
此外,python還提供了列表、字典等多種數據類型,還允許創建自定義數據類型。
Windows系統中如何安裝Python擴展模塊
Python是非常靈活的語言,我們可以在它的基礎上安裝很多的擴展模塊。那麼如何在Windows系統中安裝Python擴展模塊呢?下面我給大家分享一下。
工具/材料
CMD命令行
自定義安裝
首先我們需要自己手動下載Python擴展模塊,這裡我隨便找了個模塊,大家根據自己需要尋找,如下圖所示
接下來我們進入擴展模塊的文件夾,複製地址欄裡面的路徑,如下圖所示
然後我們按下Win+R組合鍵打開運行界面,在輸入框中輸入cmd命令,如下圖所示
接着就會打開CMD命令行界面,我們輸入cd命令,然後粘貼剛才複製的路徑,如下圖所示
最後進入模塊文件夾以後我們執行python setup.py install命令進行安裝,如下圖所示
pip自動安裝
自動安裝就不需要自己下載模塊了,首先我們進入Python安裝目錄的Scripts文件夾並複製路徑,如下圖所示
然後在命令行中通過cd命令進入這個目錄,如下圖所示
接着通過pip命令進行模塊的自動下載,注意pip的語法,如下圖所示
最後安裝好了以後我們就可以到Python安裝目錄下的site-packages文件夾下面看是否已安裝成功,如下圖所示
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/183259.html