内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

python函數(shù)鑲嵌 excel函數(shù)

怎樣把Python代碼嵌入到C程序

步驟1:安裝Python開發(fā)包

黃南州網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)公司,黃南州網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為黃南州上千提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)公司要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的黃南州做網(wǎng)站的公司定做!

由于需要訪問Python/C API,首先安裝Python開發(fā)包。

在Debian,Ubuntu或Linux Mint中:

在CentOS,F(xiàn)edora或RHEL中:

安裝成功后,Python頭文件在/usr/include/python2.7。根據(jù)Linux發(fā)行版的不同,確切的路徑可能是不相同的。例如,CentOS 6中是/usr/include/python2.6。

步驟2:初始化解釋器并設(shè)置路徑

C中嵌入Python的第一步是初始化Python解釋器,這可以用以下C函數(shù)完成。

初始化解釋器后,需要設(shè)置你的C程序中要導(dǎo)入的Python模塊的路徑。例如,比如你的Python模塊位于/usr/local/modules。然后使用以下C函數(shù)調(diào)用來設(shè)置路徑。

步驟3:數(shù)據(jù)轉(zhuǎn)換

C中嵌入Python最重要的方面之一是數(shù)據(jù)轉(zhuǎn)換。從C中傳遞數(shù)據(jù)到Python函數(shù),需要首先將數(shù)據(jù)從C數(shù)據(jù)類型轉(zhuǎn)換到Python數(shù)據(jù)類型。Python/C API提供各種函數(shù)來實(shí)現(xiàn)這。例如,轉(zhuǎn)換C字符串到Python字符串,使用PyString_FromString函數(shù)。

另外一個(gè)類似函數(shù)PyInt_FromLong,將C中l(wèi)ong數(shù)據(jù)類型轉(zhuǎn)換為Python int。每個(gè)Python/C API函數(shù)返回一個(gè)PyObject類型的引用。

步驟4:定義一個(gè)Python模塊

當(dāng)你想嵌入Python代碼到另一種語言如C,該代碼需要被寫成Python模塊,然后用另一種語言“導(dǎo)入”。所以讓我們來看看如何在C中導(dǎo)入Python模塊。

為了進(jìn)行說明,我們實(shí)現(xiàn)一個(gè)簡(jiǎn)單的Python模塊例子如下:

以上的Python函數(shù)有一個(gè)字符串作為參數(shù)并返回兩個(gè)重復(fù)的字符串。例如,如果輸入字符串是“cyberpersons”,該函數(shù)返回'cyberpersonscyberpersons'。此模塊文件命名為“printData.py”并將它放在前面聲明的Python模塊目錄中(/usr/local/modules)。

步驟5:加載一個(gè)Python模塊

現(xiàn)在你已經(jīng)定義了Python模塊,是時(shí)候在C程序中加載它了。導(dǎo)入模塊的C代碼看起來像這樣:

步驟6:構(gòu)建函數(shù)的參數(shù)

當(dāng)加載一個(gè)模塊時(shí),可以調(diào)用模塊中定義的Python函數(shù)。通常,我們需要傳遞一個(gè)或多個(gè)參數(shù)到一個(gè)Python函數(shù)。我們必須構(gòu)建一個(gè)Python元組對(duì)象,它包括Python函數(shù)中的參數(shù)。

在我們的例子中,printData函數(shù)定義帶一個(gè)參數(shù)的模塊。因此,我們構(gòu)建一個(gè)大小是一的Python元組對(duì)象如下。我們可以使用PyTuple_SetItem設(shè)置元組對(duì)象的每個(gè)項(xiàng)。

我們已經(jīng)成功構(gòu)建一個(gè)參數(shù)傳遞到函數(shù)調(diào)用,是時(shí)候從C程序調(diào)用python函數(shù)了。

步驟7:調(diào)用Python函數(shù)

一旦成功創(chuàng)建Python元組對(duì)象作為函數(shù)參數(shù),我們可以調(diào)用一個(gè)帶參數(shù)的Python函數(shù)。為此,通過使用PyObject_GetAttrString首先獲得模塊中定義的函數(shù)的引用,然后使用PyObject_CallObject調(diào)用該函數(shù)。例如:

步驟8:錯(cuò)誤檢查

避免運(yùn)行時(shí)錯(cuò)誤的常見方法是檢查函數(shù)的返回值并根據(jù)返回值采取適當(dāng)?shù)男袆?dòng)。類似于C程序中的全局變量errno,Python/C API提供一個(gè)全局指示符,它報(bào)告最后發(fā)生的錯(cuò)誤。當(dāng)Python/C API函數(shù)失敗,全局指示符設(shè)置為指示錯(cuò)誤,并且PyErr_Print可以用于顯示相應(yīng)的人類可讀的trackback。例如:

在你的應(yīng)用程序中,你可以輕松地將各種錯(cuò)誤檢查。

這里是完整的C程序,它如本教程描述的嵌入Python代碼。

步驟9:編譯和執(zhí)行

保存以上代碼到finalCode.c,并且鏈接Python庫(-lpython2.7)編譯該代碼。根據(jù)發(fā)行版的不同,可能使用不同的版本(例如,-lpython2.6)。

Python菜鳥求助 函數(shù)的嵌套問題

我怎么就變成大神了【笑哭】

def?A(a):

#這個(gè)下面有個(gè)TAB,就是為了讓下面的語句跟著你定義的這個(gè)A函數(shù)

print('i\'m?A')

#這下面的縮進(jìn)是在A函數(shù)里定義一個(gè)B函數(shù)

def?B(b):

#到這里的縮進(jìn)就是B函數(shù)的范圍了

print('i\'m?b')

print('a+b=',a+b)

#由于不跟著B函數(shù)的縮進(jìn),所以下面的這個(gè)B是A函數(shù)的范圍

B(3)

print('Done!')

A(5)

#樓主才剛學(xué)幾天呀

Python嵌套函數(shù)和閉包

在Python語言中,可以在函數(shù)中定義函數(shù)。 這種在函數(shù)中嵌套定義的函數(shù)也叫內(nèi)部函數(shù)。我們來看下面的代碼:

上述代碼中,定義了函數(shù)greet,在函數(shù)greet內(nèi)部又定義了一個(gè)函數(shù)inner_func, 并調(diào)用該函數(shù)打印了一串字符。

我們可以看到,內(nèi)部函數(shù)inner_func的定義和使用與普通函數(shù)基本相同。需要注意的是變量的作用域,在上述代碼中,函數(shù)參數(shù)name對(duì)于全局函數(shù)greet是局部變量,對(duì)內(nèi)部函數(shù)inner_func來說則是非局部變量。內(nèi)部函數(shù)對(duì)于非局部變量的訪問規(guī)則類似于標(biāo)準(zhǔn)的外部函數(shù)訪問全局變量。

從這個(gè)例子我們還可以看到內(nèi)部函數(shù)的一個(gè)作用,就是通過定義內(nèi)部函數(shù)的方式將一些功能隱藏起來,防止外部直接調(diào)用。常見的場(chǎng)景是,在一個(gè)復(fù)雜邏輯的函數(shù)中,將一些小的任務(wù)定義成內(nèi)部函數(shù),然后由這個(gè)外層函數(shù)使用,這樣可以使代碼更為清晰,易于維護(hù)。這些內(nèi)部函數(shù)只會(huì)在這個(gè)外層函數(shù)中使用,不能被其他函數(shù)或模塊使用。

在Python語言中, 函數(shù)也是對(duì)象,它可以被創(chuàng)建、賦值給變量,或者作為函數(shù)的返回值。我們來看下面這個(gè)例子。

在上述代碼中,在函數(shù)gen_greet內(nèi)部定義了inner_func函數(shù),并返回了一個(gè)inner_func函數(shù)對(duì)象。外部函數(shù)gen_greet返回了一個(gè)函數(shù)對(duì)象,所以像gen_greet這樣的函數(shù)也叫工廠函數(shù)。

在內(nèi)部函數(shù)inner_func中,使用了外部函數(shù)的傳參greet_words(非局部變量),以及函數(shù)的參數(shù)name(局部變量),來打印一個(gè)字符串。

接下來,調(diào)用gen_greet("Hello")創(chuàng)建一個(gè)函數(shù)對(duì)象say_hello,緊接著調(diào)用say_hello("Mr. Zhang"),輸出的結(jié)果為:Hello, Mr. Zhang!

同樣的,調(diào)用gen_greet("Hi")創(chuàng)建一個(gè)函數(shù)對(duì)象say_hi,調(diào)用say_hello("Mr. Zhang"),輸出的結(jié)果為:Hi,Tony!

我們可以發(fā)現(xiàn),gen_greet返回的函數(shù)對(duì)象具有記憶功能,它能夠把所需使用的非局部變量保存下來,用于后續(xù)被調(diào)用的時(shí)候使用。這種保存了非局部變量的函數(shù)對(duì)象被稱作閉包(closure)。

那么閉包是如何實(shí)現(xiàn)的呢?其實(shí)并不復(fù)雜,函數(shù)對(duì)象中有一個(gè)屬性__closure__,它就是在創(chuàng)建函數(shù)對(duì)象時(shí)用來保存這些非局部變量的。

__closure__屬性是一個(gè)元組或者None類型。在上述代碼中,我們可以通過下面方式查看:

函數(shù)的嵌套所實(shí)現(xiàn)的功能大都可以通過定義類的方式來實(shí)現(xiàn),而且類是更加面向?qū)ο蟮拇a編寫方式。

嵌套函數(shù)的一個(gè)主要用途是實(shí)現(xiàn)函數(shù)的裝飾器。我們看下面的代碼:

在上述代碼中,logger函數(shù)返回函數(shù)with_logging,with_logging則是打印了函數(shù)func的名稱及傳入的參數(shù),然后調(diào)用func, 并將參數(shù)傳遞給func。其中的@wraps(func)語句用于復(fù)制函數(shù)func的名稱、注釋文檔、參數(shù)列表等等,使得with_logging函數(shù)具有被裝飾的函數(shù)func相同的屬性。

代碼中接下來用@logger對(duì)函數(shù)power_func進(jìn)行修飾,它的作用等同于下面的代碼:

可見,裝飾器@符其實(shí)就是上述代碼的精簡(jiǎn)寫法。

通過了解了嵌套函數(shù)和閉包的工作原理,我們?cè)谑褂眠^程中就能夠更加得心應(yīng)手了。

關(guān)于python 函數(shù)嵌套的問題?

會(huì)不會(huì)出錯(cuò)不是應(yīng)該由你運(yùn)行來測(cè)試嗎?

如何理解:這一部分是業(yè)務(wù)邏輯,但更多涉及的是數(shù)學(xué),沒有上下文談算法也沒什么意義

網(wǎng)站欄目:python函數(shù)鑲嵌 excel函數(shù)
網(wǎng)站鏈接:http://www.rwnh.cn/article22/hhggcc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、面包屑導(dǎo)航、動(dòng)態(tài)網(wǎng)站、商城網(wǎng)站、網(wǎng)站內(nèi)鏈、關(guān)鍵詞優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)
峨边| 宜州市| 阿克陶县| 乌什县| 花莲县| 桃园县| 阿尔山市| 民和| 慈溪市| 盈江县| 青铜峡市| 青铜峡市| 水城县| 嘉鱼县| 益阳市| 秭归县| 吴忠市| 闸北区| 乌兰浩特市| 怀宁县| 榆树市| 漳州市| 蕉岭县| 喀喇| 德令哈市| 麻阳| 东丽区| 白河县| 祁阳县| 白朗县| 海南省| 寿阳县| 佛冈县| 娄底市| 丹棱县| 佳木斯市| 德江县| 西乌珠穆沁旗| 濉溪县| 称多县| 临安市|