91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何進行處理Python對象參數的解析

發布時間:2021-10-27 19:03:31 來源:億速云 閱讀:223 作者:柒染 欄目:編程語言

這期內容當中小編將會給大家帶來有關如何進行處理Python對象參數的解析,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

在Python對象中使用C語言編寫的擴展模塊,必須將其編譯成動態鏈接庫的形式,通常使用Python的C語言擴展接口提供的函數PyArg_ParseTuple()來獲得這些參數值,希望本文能夠對大家有幫

Python是一門面向對象的腳本語言,所有的對象在Python解釋器中都被表示成PyObject,PyObject結構包含Python對象的所有成員指針。并且對Python對象的類型信息和引用計數進行維護。在進行Python的擴展編程時,一旦要在C或者C++中對Python對象進行處理,就意味著要維護一個PyObject結構。

在Python的C語言擴展接口中,大部分函數都有一個或者多個參數為PyObject指針類型,并且返回值也大都為PyObject指針。為了簡化內存管理,Python通過引用計數機制實現了自動的垃圾回收功能,Python中的每個對象都有一個引用計數。

用來計數該對象在不同場所分別被引用了多少次。每當引用一次Python對象,相應的引用計數就增1,每當消毀一次Python對象,則相應的引用就減1,只有當引用計數為零時,才真正從內存中刪除Python對象。

下面的例子說明了Python解釋器如何利用引用計數來對Pyhon對象進行管理:

#include <Python.h>  PyObject* wrap_fact(PyObject* self, PyObject* args)   {    int n, result;        if (! PyArg_ParseTuple(args, "i:fact", &n))      return NULL;    result = fact(n);    return Py_BuildValue("i", result);  }   static PyMethodDef exampleMethods[] =   {    {"fact", wrap_fact, METH_VARARGS, "Caculate N!"},    {NULL, NULL}  };   void initexample()   {    PyObject* m;    m = Py_InitModule("example", exampleMethods);  }

在C/C++中處理Python對象時,對引用計數進行正確的維護是一個關鍵問題,處理不好將很容易產生內存泄漏。Python的C語言接口提供了一些宏來對引用計數進行維護,最常見的是用Py_INCREF()來增加使Python對象的引用計數增1,用Py_DECREF()來使Python對象的引用計數減1。

該函數是Python解釋器和C函數進行交互的接口,帶有兩個參數:self和args。參數self只在C函數被實現為內聯方法(built-in method)時才被用到。通常該參數的值為空(NULL),參數args中包含了Python解釋器要傳遞給C函數的所有參數,通常使用Python的C語言擴展接口提供的函數PyArg_ParseTuple()來獲得這些參數值。

方法列表中的每項由四個部分組成:方法名、導出函數、參數傳遞方式和方法描述。方法名是從Python解釋器中調用該方法時所使用的名字。參數傳遞方式則規定了Python向C函數傳遞參數的具體形式,可選的兩種方式是METH_VARARGS和METH_KEYWORDS。

其中METH_VARARGS是參數傳遞的標準形式,它通過Python的元組在Python解釋器和C函數之間傳遞參數,若采用METH_KEYWORD方式,則Python解釋器和C函數之間將通過Python的字典類型在兩者之間進行參數傳遞。

上述就是小編為大家分享的如何進行處理Python對象參數的解析了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

新巴尔虎右旗| 都江堰市| 达州市| 交城县| 上栗县| 荥经县| 剑川县| 古丈县| 大庆市| 绍兴市| 黄龙县| 邳州市| 麻江县| 桃源县| 贵定县| 梨树县| 上思县| 桑日县| 宽城| 清水河县| 新安县| 南郑县| 清新县| 连州市| 苍梧县| 邵东县| 修武县| 敦化市| 长垣县| 克什克腾旗| 怀宁县| 杭锦旗| 乃东县| 河南省| 武强县| 金秀| 遂溪县| 宁化县| 涿鹿县| 云龙县| 石家庄市|