函數(shù)復(fù)用python 函數(shù)可以重復(fù)使用嗎

python中函數(shù)的作用不包括

python中函數(shù)的作用不包括增加代碼量。根據(jù)查詢(xún)相關(guān)資料信息,python中函數(shù)的作用有復(fù)用代碼、提高效率、減少代碼量等相關(guān)作用。

東川ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書(shū)未來(lái)市場(chǎng)廣闊!成為成都創(chuàng)新互聯(lián)公司的ssl證書(shū)銷(xiāo)售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話(huà)聯(lián)系或者加微信:028-86922220(備注:SSL證書(shū)合作)期待與您的合作!

計(jì)算機(jī)二級(jí) Python 怎么考?考什么?

考試內(nèi)容

一、Python語(yǔ)言的基本語(yǔ)法元素

1、程序的基本語(yǔ)法元素:程序的格式框架、縮進(jìn)、注釋、變量、命名、保留字、數(shù)據(jù)類(lèi)型、賦值語(yǔ)句、引用;

2、基本輸入輸出函數(shù):input()、eval()、print();

3、源程序的書(shū)寫(xiě)風(fēng)格;

4、Python語(yǔ)言的特點(diǎn)。

二、基本數(shù)據(jù)類(lèi)型

1、數(shù)字類(lèi)型:整數(shù)類(lèi)型、浮點(diǎn)數(shù)類(lèi)型和復(fù)數(shù)類(lèi)型;

2、數(shù)字類(lèi)型的運(yùn)算:數(shù)值運(yùn)算操作符、數(shù)值運(yùn)算函數(shù);

3、字符串類(lèi)型及格式化:索引、切片、基本的format()格式化方法;

4、字符串類(lèi)型的操作:字符串操作符、處理函數(shù)和處理方法;

5、類(lèi)型判斷和類(lèi)型間轉(zhuǎn)換。

三、程序控制結(jié)構(gòu)

1、程序的三種控制結(jié)構(gòu);

2、程序的分支結(jié)構(gòu):?jiǎn)畏种ЫY(jié)構(gòu)、二分支結(jié)構(gòu)、多分支結(jié)構(gòu);

3、程序的循環(huán)結(jié)構(gòu):遍歷循環(huán)、無(wú)限循環(huán)、break和continue循環(huán)控制。

4、程序的異常處理:try-except。

四、函數(shù)和代碼復(fù)用

1、函數(shù)的定義和使用;

2、函數(shù)的參數(shù)傳遞:可選參數(shù)傳遞、參數(shù)名稱(chēng)傳遞、函數(shù)的返回值;

3、變量的作用域:局部變量和全局變量。

五、組合數(shù)據(jù)類(lèi)型

1、組合數(shù)據(jù)類(lèi)型的基本概念;

2、列表類(lèi)型:定義、索引、切片;

3、列表類(lèi)型的操作:列表的操作函數(shù)、列表的操作方法;

4、字典類(lèi)型:定義、索引;

5、字典類(lèi)型的操作:字典的操作函數(shù)、字典的操作方法。

六、文件和數(shù)據(jù)格式化

1、文件的使用:文件打開(kāi)、讀寫(xiě)和關(guān)閉;

2、數(shù)據(jù)組織的維度:一維數(shù)據(jù)和二維數(shù)據(jù);

3、一維數(shù)據(jù)的處理:表示、存儲(chǔ)和處理;

4、二維數(shù)據(jù)的處理:表示、存儲(chǔ)和處理;

5、采用CSV格式對(duì)一二維數(shù)據(jù)文件的讀寫(xiě)。

七、Python計(jì)算生態(tài)

1、標(biāo)準(zhǔn)庫(kù):turtle庫(kù)(必選)、random庫(kù)(必選)、time庫(kù)(可選);

2、基本的Python內(nèi)置函數(shù);

3、第三方庫(kù)的獲取和安裝;

4、腳本程序轉(zhuǎn)變?yōu)榭蓤?zhí)行程序的第三方庫(kù):PyInstaller庫(kù)(必選);

5、第三方庫(kù):jieba庫(kù)(必選)、wordcloud庫(kù)(可選);

6、更廣泛的Python計(jì)算生態(tài),只要求了解第三方庫(kù)的名稱(chēng),不限于以下領(lǐng)域:網(wǎng)絡(luò)爬蟲(chóng)、數(shù)據(jù)分析、文本處理、數(shù)據(jù)可視化、用戶(hù)圖形界面、機(jī)器學(xué)習(xí)、Web開(kāi)發(fā)、游戲開(kāi)發(fā)等。

二級(jí)Python語(yǔ)言程序設(shè)計(jì)考試基本要求

1、掌握Python語(yǔ)言的基本語(yǔ)法規(guī)則;

2、掌握不少于2個(gè)基本的Python標(biāo)準(zhǔn)庫(kù);

3、掌握不少于2個(gè)Python第三方庫(kù),掌握獲取并安裝第三方庫(kù)的方法;

4、能夠閱讀和分析Python程序;

5、熟練使用IDLE開(kāi)發(fā)環(huán)境,能夠?qū)⒛_本程序轉(zhuǎn)變?yōu)榭蓤?zhí)行程序;

6、了解Python計(jì)算生態(tài)在以下方面(不限于)的主要第三方庫(kù)名稱(chēng):網(wǎng)絡(luò)爬蟲(chóng)、數(shù)據(jù)分析、數(shù)據(jù)可視化、機(jī)器學(xué)習(xí)、Web開(kāi)發(fā)等。

python協(xié)程和異步IO——IO多路復(fù)用

C10k是一個(gè)在1999年被提出來(lái)的技術(shù)挑戰(zhàn),如何在一顆1GHz CPU,2G內(nèi)存,1gbps網(wǎng)絡(luò)環(huán)境下,讓單臺(tái)服務(wù)器同時(shí)為1萬(wàn)個(gè)客戶(hù)端提供FTP服務(wù)

阻塞式I/O(使用最多)、非阻塞式I/O、I/O復(fù)用、信號(hào)驅(qū)動(dòng)式I/O(幾乎不使用)、異步I/O(POSIX的aio_系列函數(shù))

select、poll、epoll都是IO多路復(fù)用的機(jī)制。I/O多路復(fù)用就是通過(guò)一種機(jī)制,一個(gè)進(jìn)程可以監(jiān)聽(tīng)多個(gè)描述符,一旦,某個(gè)描述符就緒(一般是讀就緒或者寫(xiě)就緒),能夠通知程序進(jìn)行相應(yīng)的讀寫(xiě)操作。但select、poll、epoll本質(zhì)上都是同步I/O,因?yàn)樗麄兌夹枰谧x寫(xiě)時(shí)間就緒后負(fù)責(zé)進(jìn)行讀寫(xiě),也就是說(shuō)讀寫(xiě)過(guò)程是阻塞的,而異步I/O無(wú)需自己負(fù)責(zé)進(jìn)行讀寫(xiě),異步I/O的實(shí)現(xiàn)會(huì)負(fù)責(zé)把數(shù)據(jù)從內(nèi)核拷貝到用戶(hù)空間

(1)select

select函數(shù)監(jiān)視的文件描述符分3類(lèi),分別是writefds、readfds、exceptfds。調(diào)用select函數(shù)會(huì)阻塞,直到有描述符就緒(有數(shù)據(jù)可讀、可寫(xiě)或者有except),或者超時(shí)函數(shù)返回。當(dāng)select函數(shù)返回后可以通過(guò)遍歷fdset來(lái)找到就緒的描述符。

select目前幾乎在所有的平臺(tái)上支持,其良好的跨平臺(tái)支持也是它的一個(gè)優(yōu)點(diǎn)。select的一個(gè)缺點(diǎn)在于單個(gè)進(jìn)程能夠監(jiān)視的文件描述符的數(shù)量存在最大限制,在Linux上一般為1024,可以通過(guò)修改宏定義甚至重新編譯內(nèi)核的方式提升這一限制,但是這樣也會(huì)降低效率。

(2)poll

不同于select使用三個(gè)位圖來(lái)表示三個(gè)fdset的方式,poll使用一個(gè)pollfd的指針實(shí)現(xiàn)。

pollfd結(jié)構(gòu)包含了要監(jiān)視的event和發(fā)生的event,不再使用select"參數(shù)-值"傳遞的方式。同時(shí)pollfd并沒(méi)有最大數(shù)量限制(但是數(shù)量過(guò)大后性能也會(huì)下降)。和select函數(shù)一樣,poll返回后,需要輪詢(xún)pollfd來(lái)獲取就緒的描述符。

從上面看,select和poll都需要在返回后通過(guò)遍歷文件描述符來(lái)獲取已經(jīng)就緒的socket。事實(shí)上同時(shí)連接的大量客戶(hù)端在同一時(shí)刻可能只有很少的處于就緒的狀態(tài),因此隨著監(jiān)視的描述符數(shù)量的增長(zhǎng),其效率也會(huì)線(xiàn)性下降

(3)epoll

epoll是在2.6內(nèi)核中提出的,是之前的select和poll的增強(qiáng)版本。相對(duì)于select和poll來(lái)說(shuō),epoll更加領(lǐng)靈活,沒(méi)有描述符限制。epoll使用一個(gè)文件描述符管理多個(gè)描述符,將用戶(hù)關(guān)系的文件描述符的事件存放到內(nèi)核的一個(gè)事件表中,這樣在用戶(hù)空間和內(nèi)核空間的copy只需一次。

python的優(yōu)點(diǎn)有哪些

優(yōu)點(diǎn)

簡(jiǎn)單:Python是一種代表簡(jiǎn)單主義思想的語(yǔ)言。閱讀一個(gè)良好的Python程序就感覺(jué)像是在讀英語(yǔ)一樣。它使你能夠?qū)W⒂诮鉀Q問(wèn)題而不是去搞明白語(yǔ)言本身。

易學(xué):Python極其容易上手,因?yàn)镻ython有極其簡(jiǎn)單的說(shuō)明文檔?[10]??。

易讀、易維護(hù):風(fēng)格清晰劃一、強(qiáng)制縮進(jìn)

用途廣泛

速度快:Python 的底層是用 C 語(yǔ)言寫(xiě)的,很多標(biāo)準(zhǔn)庫(kù)和第三方庫(kù)也都是用 C 寫(xiě)的,運(yùn)行速度非常快。?[7]

免費(fèi)、開(kāi)源:Python是FLOSS(自由/開(kāi)放源碼軟件)之一。使用者可以自由地發(fā)布這個(gè)軟件的拷貝、閱讀它的源代碼、對(duì)它做改動(dòng)、把它的一部分用于新的自由軟件中。FLOSS是基于一個(gè)團(tuán)體分享知識(shí)的概念。

高層語(yǔ)言:用Python語(yǔ)言編寫(xiě)程序的時(shí)候無(wú)需考慮諸如如何管理你的程序使用的內(nèi)存一類(lèi)的底層細(xì)節(jié)。

可移植性:由于它的開(kāi)源本質(zhì),Python已經(jīng)被移植在許多平臺(tái)上(經(jīng)過(guò)改動(dòng)使它能夠工作在不同平臺(tái)上)。這些平臺(tái)包括Linux、Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、AS/400、BeOS、OS/390、z/OS、Palm OS、QNX、VMS、Psion、Acom RISC OS、VxWorks、PlayStation、Sharp Zaurus、Windows CE、PocketPC、Symbian以及Google基于linux開(kāi)發(fā)的android平臺(tái)。

解釋性:一個(gè)用編譯性語(yǔ)言比如C或C++寫(xiě)的程序可以從源文件(即C或C++語(yǔ)言)轉(zhuǎn)換到一個(gè)你的計(jì)算機(jī)使用的語(yǔ)言(二進(jìn)制代碼,即0和1)。這個(gè)過(guò)程通過(guò)編譯器和不同的標(biāo)記、選項(xiàng)完成。

運(yùn)行程序的時(shí)候,連接/轉(zhuǎn)載器軟件把你的程序從硬盤(pán)復(fù)制到內(nèi)存中并且運(yùn)行。而Python語(yǔ)言寫(xiě)的程序不需要編譯成二進(jìn)制代碼。你可以直接從源代碼運(yùn)行 程序。

在計(jì)算機(jī)內(nèi)部,Python解釋器把源代碼轉(zhuǎn)換成稱(chēng)為字節(jié)碼的中間形式,然后再把它翻譯成計(jì)算機(jī)使用的機(jī)器語(yǔ)言并運(yùn)行。這使得使用Python更加簡(jiǎn)單。也使得Python程序更加易于移植。

面向?qū)ο螅篜ython既支持面向過(guò)程的編程也支持面向?qū)ο蟮木幊?。在“面向過(guò)程”的語(yǔ)言中,程序是由過(guò)程或僅僅是可重用代碼的函數(shù)構(gòu)建起來(lái)的。在“面向?qū)ο蟆钡恼Z(yǔ)言中,程序是由數(shù)據(jù)和功能組合而成的對(duì)象構(gòu)建起來(lái)的。

Python是完全面向?qū)ο蟮恼Z(yǔ)言。函數(shù)、模塊、數(shù)字、字符串都是對(duì)象。并且完全支持繼承、重載、派生、多繼承,有益于增強(qiáng)源代碼的復(fù)用性。Python支持重載運(yùn)算符和動(dòng)態(tài)類(lèi)型。相對(duì)于Lisp這種傳統(tǒng)的函數(shù)式編程語(yǔ)言,Python對(duì)函數(shù)式設(shè)計(jì)只提供了有限的支持。有兩個(gè)標(biāo)準(zhǔn)庫(kù)(functools, itertools)提供了Haskell和Standard ML中久經(jīng)考驗(yàn)的函數(shù)式程序設(shè)計(jì)工具。

可擴(kuò)展性、可擴(kuò)充性:如果需要一段關(guān)鍵代碼運(yùn)行得更快或者希望某些算法不公開(kāi),可以部分程序用C或C++編寫(xiě),然后在Python程序中使用它們。

Python本身被設(shè)計(jì)為可擴(kuò)充的。并非所有的特性和功能都集成到語(yǔ)言核心。Python提供了豐富的API和工具,以便程序員能夠輕松地使用C語(yǔ)言、C++、Cython來(lái)編寫(xiě)擴(kuò)充模塊。Python編譯器本身也可以被集成到其它需要腳本語(yǔ)言的程序內(nèi)。因此,很多人還把Python作為一種“膠水語(yǔ)言”(glue language)使用。使用Python將其他語(yǔ)言編寫(xiě)的程序進(jìn)行集成和封裝。在Google內(nèi)部的很多項(xiàng)目,例如Google Engine使用C++編寫(xiě)性能要求極高的部分,然后用Python或Java/Go調(diào)用相應(yīng)的模塊?!禤ython技術(shù)手冊(cè)》的作者馬特利(Alex Martelli)說(shuō):“這很難講,不過(guò),2004 年,Python 已在Google?內(nèi)部使用,Google 召募許多 Python 高手,但在這之前就已決定使用Python,他們的目的是 Python where we can, C++ where we must,在操控硬件的場(chǎng)合使用C++,在快速開(kāi)發(fā)時(shí)候使用 Python?!?/p>

可嵌入性:可以把Python嵌入C/C++程序,從而向程序用戶(hù)提供腳本功能。

豐富的庫(kù):Python標(biāo)準(zhǔn)庫(kù)確實(shí)很龐大。它可以幫助處理各種工作,包括正則表達(dá)式、文檔生成、單元測(cè)試、線(xiàn)程、數(shù)據(jù)庫(kù)、網(wǎng)頁(yè)瀏覽器、CGI、FTP、電子郵件、XML、XML-RPC、HTML、WAV文件、密碼系統(tǒng)、GUI(圖形用戶(hù)界面)、Tk和其他與系統(tǒng)有關(guān)的操作。這被稱(chēng)作Python的“功能齊全”理念。除了標(biāo)準(zhǔn)庫(kù)以外,還有許多其他高質(zhì)量的庫(kù),如wxPython、Twisted和Python圖像庫(kù)等等。

規(guī)范的代碼:Python采用強(qiáng)制縮進(jìn)的方式使得代碼具有較好可讀性。而Python語(yǔ)言寫(xiě)的程序不需要編譯成二進(jìn)制代碼。Python的作者設(shè)計(jì)限制性很強(qiáng)的語(yǔ)法,使得不好的編程習(xí)慣(例如if語(yǔ)句的下一行不向右縮進(jìn))都不能通過(guò)編譯。其中很重要的一項(xiàng)就是Python的縮進(jìn)規(guī)則。一個(gè)和其他大多數(shù)語(yǔ)言(如C)的區(qū)別就是,一個(gè)模塊的界限,完全是由每行的首字符在這一行的位置來(lái)決定(而C語(yǔ)言是用一對(duì)花括號(hào){}來(lái)明確的定出模塊的邊界,與字符的位置毫無(wú)關(guān)系)。通過(guò)強(qiáng)制程序員們縮進(jìn)(包括if,for和函數(shù)定義等所有需要使用模塊的地方),Python確實(shí)使得程序更加清晰和美觀。

高級(jí)動(dòng)態(tài)編程:雖然Python可能被粗略地分類(lèi)為“腳本語(yǔ)言”(script language),但實(shí)際上一些大規(guī)模軟件開(kāi)發(fā)計(jì)劃例如Zope、Mnet及BitTorrent,Google也廣泛地使用它。Python的支持者較喜歡稱(chēng)它為一種高級(jí)動(dòng)態(tài)編程語(yǔ)言,原因是“腳本語(yǔ)言”泛指僅作簡(jiǎn)單程序設(shè)計(jì)任務(wù)的語(yǔ)言,如shellscript、VBScript等只能處理簡(jiǎn)單任務(wù)的編程語(yǔ)言,并不能與Python相提并論。

做科學(xué)計(jì)算優(yōu)點(diǎn)多:說(shuō)起科學(xué)計(jì)算,首先會(huì)被提到的可能是MATLAB。除了MATLAB的一些專(zhuān)業(yè)性很強(qiáng)的工具箱還無(wú)法被替代之外,MATLAB的大部分常用功能都可以在Python世界中找到相應(yīng)的擴(kuò)展庫(kù)。和MATLAB相比,用Python做科學(xué)計(jì)算有如下優(yōu)點(diǎn):

● 首先,MATLAB是一款商用軟件,并且價(jià)格不菲。而Python完全免費(fèi),眾多開(kāi)源的科學(xué)計(jì)算庫(kù)都提供了Python的調(diào)用接口。用戶(hù)可以在任何計(jì)算機(jī)上免費(fèi)安裝Python及其絕大多數(shù)擴(kuò)展庫(kù)。

● 其次,與MATLAB相比,Python是一門(mén)更易學(xué)、更嚴(yán)謹(jǐn)?shù)某绦蛟O(shè)計(jì)語(yǔ)言。它能讓用戶(hù)編寫(xiě)出更易讀、易維護(hù)的代碼。

● 最后,MATLAB主要專(zhuān)注于工程和科學(xué)計(jì)算。然而即使在計(jì)算領(lǐng)域,也經(jīng)常會(huì)遇到文件管理、界面設(shè)計(jì)、網(wǎng)絡(luò)通信等各種需求。而Python有著豐富的擴(kuò)展庫(kù),可以輕易完成各種高級(jí)任務(wù),開(kāi)發(fā)者可以用Python實(shí)現(xiàn)完整應(yīng)用程序所需的各種功能。

python的函數(shù)和代碼復(fù)用是什么意思

就是說(shuō)一段代碼/函數(shù)你能用多次,就像南孚一樣,用在不同的場(chǎng)合中

如何實(shí)現(xiàn) C/C++ 與 Python 的通信

Python指它的標(biāo)準(zhǔn)實(shí)現(xiàn),即CPython(雖然不是很?chē)?yán)格)

本文分4個(gè)部分

C/C++ 調(diào)用 Python (基礎(chǔ)篇)— 僅討論P(yáng)ython官方提供的實(shí)現(xiàn)方式

Python 調(diào)用 C/C++ (基礎(chǔ)篇)— 僅討論P(yáng)ython官方提供的實(shí)現(xiàn)方式

C/C++ 調(diào)用 Python (高級(jí)篇)— 使用 Cython

Python 調(diào)用 C/C++ (高級(jí)篇)— 使用 SWIG

練習(xí)本文中的例子,需要搭建Python擴(kuò)展開(kāi)發(fā)環(huán)境。具體細(xì)節(jié)見(jiàn)搭建Python擴(kuò)展開(kāi)發(fā)環(huán)境 - 蛇之魅惑 - 知乎專(zhuān)欄

1 C/C++ 調(diào)用 Python(基礎(chǔ)篇)

Python 本身就是一個(gè)C庫(kù)。你所看到的可執(zhí)行體python只不過(guò)是個(gè)stub。真正的python實(shí)體在動(dòng)態(tài)鏈接庫(kù)里實(shí)現(xiàn),在Windows平臺(tái)上,這個(gè)文件位于 %SystemRoot%\System32\python27.dll。

你也可以在自己的程序中調(diào)用Python,看起來(lái)非常容易:

//my_python.c

#include Python.h

int main(int argc, char *argv[])

{

Py_SetProgramName(argv[0]);

Py_Initialize();

PyRun_SimpleString("print 'Hello Python!'\n");

Py_Finalize();

return 0;

}

在Windows平臺(tái)下,打開(kāi)Visual Studio命令提示符,編譯命令為

cl my_python.c -IC:\Python27\include C:\Python27\libs\python27.lib

在Linux下編譯命令為

gcc my_python.c -o my_python -I/usr/include/python2.7/ -lpython2.7

在Mac OS X 下的編譯命令同上

產(chǎn)生可執(zhí)行文件后,直接運(yùn)行,結(jié)果為輸出

Hello Python!

Python庫(kù)函數(shù)PyRun_SimpleString可以執(zhí)行字符串形式的Python代碼。

雖然非常簡(jiǎn)單,但這段代碼除了能用C語(yǔ)言動(dòng)態(tài)生成一些Python代碼之外,并沒(méi)有什么用處。我們需要的是C語(yǔ)言的數(shù)據(jù)結(jié)構(gòu)能夠和Python交互。

下面舉個(gè)例子,比如說(shuō),有一天我們用Python寫(xiě)了一個(gè)功能特別強(qiáng)大的函數(shù):

def great_function(a):

return a + 1

接下來(lái)要把它包裝成C語(yǔ)言的函數(shù)。我們期待的C語(yǔ)言的對(duì)應(yīng)函數(shù)應(yīng)該是這樣的:

int great_function_from_python(int a) {

int res;

// some magic

return res;

}

首先,復(fù)用Python模塊得做‘import’,這里也不例外。所以我們把great_function放到一個(gè)module里,比如說(shuō),這個(gè)module名字叫 great_module.py

接下來(lái)就要用C來(lái)調(diào)用Python了,完整的代碼如下:

#include Python.h

int great_function_from_python(int a) {

int res;

PyObject *pModule,*pFunc;

PyObject *pArgs, *pValue;

/* import */

pModule = PyImport_Import(PyString_FromString("great_module"));

/* great_module.great_function */

pFunc = PyObject_GetAttrString(pModule, "great_function");

/* build args */

pArgs = PyTuple_New(1);

PyTuple_SetItem(pArgs,0, PyInt_FromLong(a));

/* call */

pValue = PyObject_CallObject(pFunc, pArgs);

res = PyInt_AsLong(pValue);

return res;

}

從上述代碼可以窺見(jiàn)Python內(nèi)部運(yùn)行的方式:

所有Python元素,module、function、tuple、string等等,實(shí)際上都是PyObject。C語(yǔ)言里操縱它們,一律使用PyObject *。

Python的類(lèi)型與C語(yǔ)言類(lèi)型可以相互轉(zhuǎn)換。Python類(lèi)型XXX轉(zhuǎn)換為C語(yǔ)言類(lèi)型YYY要使用PyXXX_AsYYY函數(shù);C類(lèi)型YYY轉(zhuǎn)換為Python類(lèi)型XXX要使用PyXXX_FromYYY函數(shù)。

也可以創(chuàng)建Python類(lèi)型的變量,使用PyXXX_New可以創(chuàng)建類(lèi)型為XXX的變量。

若a是Tuple,則a[i] = b對(duì)應(yīng)于 PyTuple_SetItem(a,i,b),有理由相信還有一個(gè)函數(shù)PyTuple_GetItem完成取得某一項(xiàng)的值。

不僅Python語(yǔ)言很優(yōu)雅,Python的庫(kù)函數(shù)API也非常優(yōu)雅。

現(xiàn)在我們得到了一個(gè)C語(yǔ)言的函數(shù)了,可以寫(xiě)一個(gè)main測(cè)試它

#include Python.h

int great_function_from_python(int a);

int main(int argc, char *argv[]) {

Py_Initialize();

printf("%d",great_function_from_python(2));

Py_Finalize();

}

編譯的方式就用本節(jié)開(kāi)頭使用的方法。

在Linux/Mac OSX運(yùn)行此示例之前,可能先需要設(shè)置環(huán)境變量:

bash:

export PYTHONPATH=.:$PYTHONPATH

csh:

setenv PYTHONPATH .:$PYTHONPATH

2 Python 調(diào)用 C/C++(基礎(chǔ)篇)

這種做法稱(chēng)為Python擴(kuò)展。

比如說(shuō),我們有一個(gè)功能強(qiáng)大的C函數(shù):

int great_function(int a) {

return a + 1;

}

期望在Python里這樣使用:

from great_module import great_function

great_function(2)

3

考慮最簡(jiǎn)單的情況。我們把功能強(qiáng)大的函數(shù)放入C文件 great_module.c 中。

#include Python.h

int great_function(int a) {

return a + 1;

}

static PyObject * _great_function(PyObject *self, PyObject *args)

{

int _a;

int res;

if (!PyArg_ParseTuple(args, "i", _a))

return NULL;

res = great_function(_a);

return PyLong_FromLong(res);

}

static PyMethodDef GreateModuleMethods[] = {

{

"great_function",

_great_function,

METH_VARARGS,

""

},

{NULL, NULL, 0, NULL}

};

PyMODINIT_FUNC initgreat_module(void) {

(void) Py_InitModule("great_module", GreateModuleMethods);

}

除了功能強(qiáng)大的函數(shù)great_function外,這個(gè)文件中還有以下部分:

包裹函數(shù)_great_function。它負(fù)責(zé)將Python的參數(shù)轉(zhuǎn)化為C的參數(shù)(PyArg_ParseTuple),調(diào)用實(shí)際的great_function,并處理great_function的返回值,最終返回給Python環(huán)境。

導(dǎo)出表GreateModuleMethods。它負(fù)責(zé)告訴Python這個(gè)模塊里有哪些函數(shù)可以被Python調(diào)用。導(dǎo)出表的名字可以隨便起,每一項(xiàng)有4個(gè)參數(shù):第一個(gè)參數(shù)是提供給Python環(huán)境的函數(shù)名稱(chēng),第二個(gè)參數(shù)是_great_function,即包裹函數(shù)。第三個(gè)參數(shù)的含義是參數(shù)變長(zhǎng),第四個(gè)參數(shù)是一個(gè)說(shuō)明性的字符串。導(dǎo)出表總是以{NULL, NULL, 0, NULL}結(jié)束。

導(dǎo)出函數(shù)initgreat_module。這個(gè)的名字不是任取的,是你的module名稱(chēng)添加前綴init。導(dǎo)出函數(shù)中將模塊名稱(chēng)與導(dǎo)出表進(jìn)行連接。

網(wǎng)頁(yè)名稱(chēng):函數(shù)復(fù)用python 函數(shù)可以重復(fù)使用嗎
網(wǎng)站路徑:http://muchs.cn/article40/docdceo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站品牌網(wǎng)站建設(shè)、網(wǎng)站排名商城網(wǎng)站、ChatGPTApp開(kāi)發(fā)

廣告

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

外貿(mào)網(wǎng)站建設(shè)