成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何進(jìn)行處理Python對象參數(shù)解析

開發(fā) 后端
Python將被更加廣泛地應(yīng)用于各個領(lǐng)域,為了克服腳本語言執(zhí)行速度慢的問題,Python對象提供了相應(yīng)的C語言擴(kuò)展接口,通過將影響執(zhí)行性能的關(guān)鍵代碼用C語言實現(xiàn)。

Python對象中使用C語言編寫的擴(kuò)展模塊,必須將其編譯成動態(tài)鏈接庫的形式,通常使用Python的C語言擴(kuò)展接口提供的函數(shù)PyArg_ParseTuple()來獲得這些參數(shù)值,希望本文能夠?qū)Υ蠹矣袔椭?/FONT>

Python是用C語言實現(xiàn)的一種腳本語言,本身具有優(yōu)良的開放性和可擴(kuò)展性,并提供了方便靈活的應(yīng)用程序接口(API)。從而使得C/C++程序員能夠在各個級別上對Python解釋器的功能進(jìn)行擴(kuò)展。在使用C/C++對Python進(jìn)行功能擴(kuò)展之前,必須首先掌握Python解釋所提供的C語言接口。

Python是一門面向?qū)ο蟮哪_本語言,所有的對象在Python解釋器中都被表示成PyObject,PyObject結(jié)構(gòu)包含Python對象的所有成員指針。并且對Python對象的類型信息和引用計數(shù)進(jìn)行維護(hù)。在進(jìn)行Python的擴(kuò)展編程時,一旦要在C或者C++中對Python對象進(jìn)行處理,就意味著要維護(hù)一個PyObject結(jié)構(gòu)。

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

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

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

  1. #include <Python.h> 
  2.  
  3. PyObject* wrap_fact(PyObject* self, PyObject* args)   
  4. {  
  5.   int n, result;  
  6.     
  7.   if (! PyArg_ParseTuple(args, "i:fact", &n))  
  8.     return NULL;  
  9.   result = fact(n);  
  10.   return Py_BuildValue("i", result);  
  11. }  
  12.  
  13. static PyMethodDef exampleMethods[] =   
  14. {  
  15.   {"fact", wrap_fact, METH_VARARGS, "Caculate N!"},  
  16.   {NULL, NULL}  
  17. };  
  18.  
  19. void initexample()   
  20. {  
  21.   PyObject* m;  
  22.   m = Py_InitModule("example", exampleMethods);  

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

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

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

其中METH_VARARGS是參數(shù)傳遞的標(biāo)準(zhǔn)形式,它通過Python的元組在Python解釋器和C函數(shù)之間傳遞參數(shù),若采用METH_KEYWORD方式,則Python解釋器和C函數(shù)之間將通過Python的字典類型在兩者之間進(jìn)行參數(shù)傳遞。

【編輯推薦】

  1. 有關(guān)Python系統(tǒng)文件進(jìn)行介紹指導(dǎo)
  2. 如何正確的使用Python函數(shù)
  3. 對Python 構(gòu)建工具進(jìn)行詳細(xì)介紹分析
  4. PythonAndroid淺析Python優(yōu)勢所在
  5. 如何使用Python模塊解析配置文件?
責(zé)任編輯:chenqingxiang 來源: NET130
相關(guān)推薦

2010-01-27 15:29:45

C++異常處理

2010-09-27 10:54:53

JVM參數(shù)配置

2010-02-01 10:21:36

Python編碼轉(zhuǎn)換

2010-02-22 16:05:40

Python配置

2024-07-08 08:38:37

Python游戲開發(fā)

2010-02-03 13:55:51

Python 代碼

2010-08-05 09:46:45

FlexAIR文件打包

2009-12-23 11:01:50

ADO.NET 批處理

2010-02-01 14:48:43

2010-02-01 17:33:24

Python主線程

2010-02-01 18:20:17

Python 多重繼承

2010-03-11 17:38:20

Python中文

2010-03-15 15:11:50

Python列表

2010-02-02 16:47:12

Python主線程

2010-06-12 09:37:02

UML需求分析

2010-03-01 16:32:36

Python語言

2010-03-09 18:14:55

Python sock

2010-02-01 16:22:36

Python字符串操作

2010-03-01 11:06:52

Python 調(diào)試器

2010-03-15 15:45:15

Python編程語言
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 欧美成人a| 久久午夜国产精品www忘忧草 | 97精品一区二区 | 国产一区二区三区四区五区加勒比 | 一区不卡在线观看 | www.99热.com| 精品成人一区二区 | 国产高清一区二区三区 | 亚洲午夜精品 | 精品国产精品三级精品av网址 | 免费观看www | 激情一区二区三区 | 色综合色综合色综合 | 毛片视频免费观看 | 久久久国产一区 | 国产中文字幕在线观看 | 日韩久草| 毛片久久久 | 久久久久国产精品一区二区 | 成人在线视频网站 | h片在线免费观看 | 久久亚洲天堂 | 亚洲每日更新 | 欧美专区在线 | 日韩精品国产精品 | 亚洲成人自拍 | 99精品国自产在线观看 | 久久免费视频网 | 亚洲精品一区二区三区在线 | 91免费看片神器 | 成人午夜视频在线观看 | 99pao成人国产永久免费视频 | 午夜不卡福利视频 | 国产欧美日韩在线一区 | 九九热精品在线 | 久久在看| 欧美一级视频免费看 | 国产精品亚洲综合 | 国产精品99久久久久久久久久久久 | 亚洲综合日韩精品欧美综合区 | 在线观看黄色电影 |