自定義python擴展類型,python常用的擴展模塊

本文目錄一覽:

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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-24 16:27
下一篇 2024-11-24 16:27

相關推薦

  • int類型變量的細節與注意事項

    本文將從 int 類型變量的定義、聲明、初始化、範圍、運算和類型轉換等方面,對 int 類型變量進行詳細闡述和講解,幫助讀者更好地掌握和應用 int 變量。 一、定義與聲明 int…

    編程 2025-04-29
  • Python 常用數據庫有哪些?

    在Python編程中,數據庫是不可或缺的一部分。隨着互聯網應用的不斷擴大,處理海量數據已成為一種趨勢。Python有許多成熟的數據庫管理系統,接下來我們將從多個方面介紹Python…

    編程 2025-04-29
  • Python3定義函數參數類型

    Python是一門動態類型語言,不需要在定義變量時顯示的指定變量類型,但是Python3中提供了函數參數類型的聲明功能,在函數定義時明確定義參數類型。在函數的形參後面加上冒號(:)…

    編程 2025-04-29
  • Python基本數字類型

    本文將介紹Python中基本數字類型,包括整型、布爾型、浮點型、複數型,並提供相應的代碼示例以便讀者更好的理解。 一、整型 整型即整數類型,Python中的整型沒有大小限制,所以可…

    編程 2025-04-29
  • 光模塊異常,SFP未認證(entityphysicalindex=6743835)——解決方案和

    如果您遇到類似optical module exception, sfp is not certified. (entityphysicalindex=6743835)的問題,那麼…

    編程 2025-04-29
  • Python中的Bool類型判斷

    本篇文章旨在講解Python中的Bool類型判斷。在Python中,Bool類型是經常使用的一種類型,因此掌握其用法非常重要。 一、True和False 在Python中,True…

    編程 2025-04-29
  • Python中自定義函數必須有return語句

    自定義函數是Python中最常見、最基本也是最重要的語句之一。在Python中,自定義函數必須有明確的返回值,即必須要有return語句。本篇文章將從以下幾個方面對此進行詳細闡述。…

    編程 2025-04-29
  • Python模塊下載與安裝指南

    如果想要擴展Python的功能,可以使用Python模塊來實現。但是,在使用之前,需要先下載並安裝對應的模塊。本文將從以下多個方面對Python模塊下載與安裝進行詳細的闡述,包括使…

    編程 2025-04-29
  • Python編程三劍客——模塊、包、庫

    本文主要介紹Python編程三劍客:模塊、包、庫的概念、特點、用法,以及在實際編程中的實際應用,旨在幫助讀者更好地理解和應用Python編程。 一、模塊 1、概念:Python模塊…

    編程 2025-04-29
  • Python函數類型有哪些

    本文將從以下幾個方面詳細闡述Python函數類型。 一、內置函數 Python的內置函數是指在Python編程語言中提供的可以直接使用的函數,不需要通過導入模塊等方式引入。 部分常…

    編程 2025-04-29

發表回復

登錄後才能評論