Python電子教案5函數(shù)和代碼復(fù)用_第1頁(yè)
Python電子教案5函數(shù)和代碼復(fù)用_第2頁(yè)
Python電子教案5函數(shù)和代碼復(fù)用_第3頁(yè)
Python電子教案5函數(shù)和代碼復(fù)用_第4頁(yè)
Python電子教案5函數(shù)和代碼復(fù)用_第5頁(yè)
已閱讀5頁(yè),還剩53頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

函數(shù)的根本運(yùn)用函數(shù)是一段具有特定功能的、可重用的語(yǔ)句組,用函數(shù)名來(lái)表示并經(jīng)過(guò)函數(shù)名完勝利能調(diào)用。函數(shù)也可以看作一段具有名字的子程序,可以在需求的地方調(diào)用執(zhí)行,不需求在每個(gè)執(zhí)行地方反復(fù)編寫(xiě)這些語(yǔ)句。每次運(yùn)用函數(shù)可以提供不同的參數(shù)作為輸入,以實(shí)現(xiàn)對(duì)不同數(shù)據(jù)的處置;函數(shù)執(zhí)行后,還可以反響相應(yīng)的結(jié)果。函數(shù)可以完成特定功能,與黑盒類(lèi)似,對(duì)函數(shù)的運(yùn)用不需求了解函數(shù)內(nèi)部實(shí)現(xiàn)原理,只需了解函數(shù)的輸入輸出方式即可。嚴(yán)厲說(shuō),函數(shù)是一種功能籠統(tǒng)。函數(shù)的定義有些函數(shù)是用戶本人編寫(xiě)的,稱(chēng)為自定義函數(shù);Python安裝包也自帶了一些函數(shù)和方法,包括Python內(nèi)置的函數(shù)〔如abs()、eval()〕、Python規(guī)范庫(kù)中的函數(shù)〔如math庫(kù)中的sqrt()〕等。函數(shù)的定義運(yùn)用函數(shù)主要有兩個(gè)目的:降低編程難度和代碼重用。函數(shù)是一種功能籠統(tǒng),利用它可以將一個(gè)復(fù)雜的大問(wèn)題分解成一系列簡(jiǎn)單的小問(wèn)題,然后將小問(wèn)題繼續(xù)劃分成更小的問(wèn)題,當(dāng)問(wèn)題細(xì)化為足夠簡(jiǎn)單時(shí),就可以分而治之函數(shù)可以在一個(gè)程序中多個(gè)位置運(yùn)用,也可以用于多個(gè)程序,當(dāng)需求修正代碼時(shí),只需求在函數(shù)中修正一次,一切調(diào)用位置的功能都更新了,這種代碼重用降低了代碼行數(shù)和代碼維護(hù)難度。函數(shù)的定義Python定義一個(gè)函數(shù)運(yùn)用def保管字,語(yǔ)法方式如下:def<函數(shù)名>(<參數(shù)列表>):<函數(shù)體>return<前往值列表>函數(shù)的定義函數(shù)名可以是任何有效的Python標(biāo)識(shí)符;參數(shù)列表是調(diào)用該函數(shù)時(shí)傳送給它的值,可以有零個(gè)、一個(gè)或多個(gè),當(dāng)傳送多個(gè)參數(shù)時(shí)各參數(shù)由逗號(hào)分隔,當(dāng)沒(méi)有參數(shù)時(shí)也要保管圓括號(hào)。函數(shù)定義中參數(shù)列表里面的參數(shù)是方式參數(shù),簡(jiǎn)稱(chēng)為“形參〞。函數(shù)體是函數(shù)每次被調(diào)用時(shí)執(zhí)行的代碼,由一行或多行語(yǔ)句組成。假設(shè)需求前往值,運(yùn)用保管字return和前往值列表。函數(shù)可以沒(méi)有return語(yǔ)句,在函數(shù)體終了位置將控制權(quán)前往給調(diào)用者。函數(shù)的定義函數(shù)調(diào)用和執(zhí)行的普通方式是:<函數(shù)名>(<參數(shù)列表>)此時(shí),參數(shù)列表中給出要傳進(jìn)入函數(shù)內(nèi)部的參數(shù),這類(lèi)參數(shù)稱(chēng)為實(shí)踐參數(shù),簡(jiǎn)稱(chēng)為“實(shí)參〞。函數(shù)的定義編寫(xiě)程序?yàn)镸ike和Lily輸出生日歌。最簡(jiǎn)單的實(shí)現(xiàn)方法是反復(fù)運(yùn)用print()語(yǔ)句,對(duì)Mike的生日歌輸出如下:微實(shí)例5.1:生日歌其中,第1、2、4行代碼一樣,假設(shè)需求將birthday改為newyear,那么每處都要修正。為了防止這種情況,可以用函數(shù)printHappy()進(jìn)展封裝。除了Mike,假設(shè)再對(duì)Lily輸出生日歌,除第3行有微小不同外與上述代碼一致,這會(huì)帶來(lái)反復(fù)代碼。假設(shè)再有Eric,Adam呢?為了可以復(fù)用語(yǔ)句,采用函數(shù)方式完勝利能,代碼如下微實(shí)例5.1:生日歌微實(shí)例5.1:生日歌該程序輸出效果如下:微實(shí)例5.1:生日歌微實(shí)例5.1代碼中第3行定義了一個(gè)函數(shù)happyB(),括號(hào)中name是形參,用來(lái)指代要輸入到函數(shù)的實(shí)踐變量,并參與完成函數(shù)內(nèi)部功能。第8和10行兩次調(diào)用happyB()函數(shù),輸入的"Mike"和"Lily"是實(shí)參,交換name,用于函數(shù)執(zhí)行。微實(shí)例5.1:生日歌程序調(diào)用一個(gè)函數(shù)需求執(zhí)行以下四個(gè)步驟:〔1〕調(diào)用程序在調(diào)用途暫停執(zhí)行;〔2〕在調(diào)用時(shí)將實(shí)參復(fù)制給函數(shù)的形參;〔3〕執(zhí)行函數(shù)體語(yǔ)句;〔4〕函數(shù)調(diào)用終了給出前往值,程序回到調(diào)用前的暫停處繼續(xù)執(zhí)行。函數(shù)的調(diào)用過(guò)程對(duì)微實(shí)例5.1的生日歌程序跟蹤分析。第1到7行是函數(shù)定義,函數(shù)只需在被調(diào)用時(shí)才執(zhí)行,因此,前7行代碼不直接執(zhí)行。程序最先執(zhí)行的語(yǔ)句是第8行的happyB("Mike")。當(dāng)Python執(zhí)行到這行時(shí),由于調(diào)用了happyB()函數(shù),當(dāng)前執(zhí)行暫停,程序用實(shí)參"Mike"交換happyB(name)中的形參name,形參被賦值為實(shí)參的值,類(lèi)似執(zhí)行了如下語(yǔ)句:name="Mike"函數(shù)的調(diào)用過(guò)程然后,運(yùn)用實(shí)參替代形參執(zhí)行函數(shù)體內(nèi)容。當(dāng)函數(shù)執(zhí)行終了后,重新回到第8行,繼續(xù)執(zhí)行余下語(yǔ)句。函數(shù)第8行的執(zhí)行過(guò)程如圖5.1所示,這里函數(shù)happyB()的變量name被自動(dòng)交換為"Mike"。函數(shù)的調(diào)用過(guò)程當(dāng)程序執(zhí)行happyB()函數(shù)體時(shí),第一條執(zhí)行語(yǔ)句是happy()函數(shù),這也是一個(gè)函數(shù)調(diào)用。因此,Python暫停執(zhí)行happyB()函數(shù),將控制傳送給被調(diào)用的函數(shù)happy()。happy()函數(shù)體包含了一個(gè)簡(jiǎn)單的print語(yǔ)句,該語(yǔ)句執(zhí)行后函數(shù)體終了,程序重新前往調(diào)用happy()函數(shù)的位置。圖5.2給出了happy()函數(shù)調(diào)用和前往的執(zhí)行過(guò)程。函數(shù)的調(diào)用過(guò)程函數(shù)的調(diào)用過(guò)程程序執(zhí)行完happyB()函數(shù)體后,前往調(diào)用該函數(shù)的原始位置,繼續(xù)執(zhí)行,如圖5.3所示。函數(shù)的調(diào)用過(guò)程lambda用于定義一種特殊的函數(shù)——匿名函數(shù),又稱(chēng)lambda函數(shù)匿名函數(shù)并非沒(méi)有名字,而是將函數(shù)名作為函數(shù)結(jié)果前往<函數(shù)名>=lambda<參數(shù)列表>:<表達(dá)式>lambda函數(shù)與正常函數(shù)一樣,等價(jià)于下面方式:def<函數(shù)名>(<參數(shù)列表>):return<表達(dá)式>lambda函數(shù)簡(jiǎn)單說(shuō),lambda函數(shù)用于定義簡(jiǎn)單的、可以在一行內(nèi)表示的函數(shù),前往一個(gè)函數(shù)類(lèi)型,實(shí)例如下。lambda函數(shù)函數(shù)的參數(shù)傳送在定義函數(shù)時(shí),假設(shè)有些參數(shù)存在默許值,即部分參數(shù)不一定需求調(diào)用程序輸入,可以在定義函數(shù)時(shí)直接為這些參數(shù)指定默許值。當(dāng)函數(shù)被調(diào)用時(shí),假設(shè)沒(méi)有傳入對(duì)應(yīng)的參數(shù)值,那么運(yùn)用函數(shù)定義時(shí)的默許值替代,例如:可選參數(shù)和可變數(shù)量參數(shù)由于函數(shù)調(diào)用時(shí)需求按順序輸入?yún)?shù),可選參數(shù)必需定義在非可選參數(shù)的后面,即dup()函數(shù)中帶默許值的可選參數(shù)times必需定義在str參數(shù)后面。 在函數(shù)定義時(shí),也可以設(shè)計(jì)可變數(shù)量參數(shù),經(jīng)過(guò)參數(shù)前添加星號(hào)〔*〕實(shí)現(xiàn)。帶有星號(hào)的可變參數(shù)只能出如今參數(shù)列表的最后。調(diào)用時(shí),這些參數(shù)被當(dāng)作元組類(lèi)型傳送到函數(shù)中,實(shí)例如下??蛇x參數(shù)和可變數(shù)量參數(shù)vfunc()函數(shù)定義了可變參數(shù)b,調(diào)用vfunc()函數(shù)時(shí)輸入的(2,3,4,5)被當(dāng)作元組傳送給b,與a累加后輸出。第6.1節(jié)將詳細(xì)引見(jiàn)元組類(lèi)型,這里請(qǐng)讀者將元組了解為一組元素??蛇x參數(shù)和可變數(shù)量參數(shù)函數(shù)調(diào)用時(shí),實(shí)參默許采用按照位置順序的方式傳送給函數(shù),例如dup("knock~",4)中第一個(gè)實(shí)參默許賦值給形參str,第二個(gè)實(shí)參賦值給形參times。但當(dāng)參數(shù)很多時(shí),這種調(diào)用參數(shù)方式可讀性較差。假設(shè)func()函數(shù)有6個(gè)參數(shù),它的定義如下,參數(shù)分別表示2組三維坐標(biāo)值。func(x1,y1,z1,x2,y2,z2):return參數(shù)的位置和稱(chēng)號(hào)傳送它的一個(gè)實(shí)踐調(diào)用如下: result=func(1,2,3,4,5,6,)假設(shè)僅看實(shí)踐調(diào)用而不找到函數(shù)定義,很難了解這些輸入?yún)?shù)的含義。在規(guī)模稍大的程序中,函數(shù)定義能夠在函數(shù)庫(kù)中,也能夠與調(diào)用相差很遠(yuǎn),帶來(lái)較差的可讀性。參數(shù)的位置和稱(chēng)號(hào)傳送為理處理上述問(wèn)題,Python提供了按照形參稱(chēng)號(hào)輸入實(shí)參的方式,函數(shù)調(diào)用如下: result=func(x2=4,y2=5,z2=6,x1=1,y1=2,z1=3) 由于調(diào)用函數(shù)時(shí)指定了參數(shù)稱(chēng)號(hào),所以參數(shù)之間的順序可以恣意調(diào)整。參數(shù)的位置和稱(chēng)號(hào)傳送return語(yǔ)句用來(lái)退出函數(shù)并將程序前往到函數(shù)被調(diào)用的位置繼續(xù)執(zhí)行。return語(yǔ)句同時(shí)可以將0個(gè)、1個(gè)或多個(gè)函數(shù)運(yùn)算完的結(jié)果前往給函數(shù)被調(diào)用途的變量,例如。變量的前往值函數(shù)可以沒(méi)有return,此時(shí)函數(shù)并不前往值,如微實(shí)例5.1的happy()函數(shù)。函數(shù)也可以用return前往多個(gè)值,多個(gè)值以元組類(lèi)型保管變量的前往值一個(gè)程序中的變量包括兩類(lèi):全局變量和部分變量。全局變量指在函數(shù)之外定義的變量,普通沒(méi)有縮進(jìn),在程序執(zhí)行全過(guò)程有效。部分變量指在函數(shù)內(nèi)部運(yùn)用的變量,僅在函數(shù)內(nèi)部有效,當(dāng)函數(shù)退出時(shí)變量將不存在。例子如下。函數(shù)對(duì)變量的作用函數(shù)對(duì)變量的作用這個(gè)例子闡明,當(dāng)函數(shù)執(zhí)行完退出后,其內(nèi)部變量將被釋放。假設(shè)函數(shù)內(nèi)部運(yùn)用了全局變量呢?例子如下。函數(shù)對(duì)變量的作用函數(shù)func()內(nèi)部運(yùn)用了變量n,并且將變量參數(shù)b賦值給變量n,為何n值沒(méi)有改動(dòng)?函數(shù)func()有本人的內(nèi)存空間,它將n=b語(yǔ)句了解為生成一個(gè)部分變量n,并將參數(shù)b賦值給它,此時(shí)func()函數(shù)沒(méi)有將n當(dāng)作全局變量。所以,函數(shù)退出后,部分變量n被釋放,全局變量n的值沒(méi)有修正。函數(shù)對(duì)變量的作用假設(shè)希望讓func()函數(shù)將n當(dāng)作全局變量,需求在變量n運(yùn)用前顯式聲明該變量為全局變量,代碼如下。函數(shù)對(duì)變量的作用假設(shè)此時(shí)的全局變量不是整數(shù)n,而是列表類(lèi)型ls,會(huì)怎樣樣呢?了解如下代碼。函數(shù)對(duì)變量的作用請(qǐng)讀者留意,奇觀產(chǎn)生了,全局列表變量在函數(shù)func()調(diào)用后竟然發(fā)生了改動(dòng)!列表等組合數(shù)據(jù)類(lèi)型由于操作多個(gè)數(shù)據(jù),所以它們?cè)谶\(yùn)用中有創(chuàng)建和援用的分別。當(dāng)列表變量被方括號(hào)〔[],無(wú)論能否為空〕賦值時(shí),這個(gè)列表才被真實(shí)創(chuàng)建,否那么只是對(duì)之前創(chuàng)建列表的一次援用。函數(shù)對(duì)變量的作用上述代碼func()函數(shù)的ls.append(b)語(yǔ)句執(zhí)行時(shí)需求一個(gè)真實(shí)創(chuàng)建過(guò)的列表,此時(shí)func()函數(shù)專(zhuān)屬的內(nèi)存空間中沒(méi)有曾經(jīng)創(chuàng)建過(guò)且稱(chēng)號(hào)為ls的列表,因此,func()函數(shù)進(jìn)一步去尋覓全局內(nèi)存空間,自動(dòng)關(guān)聯(lián)全局ls列表,并修正其內(nèi)容。當(dāng)func()函數(shù)退出后,全局ls列表中的內(nèi)容被修正。簡(jiǎn)單說(shuō),對(duì)于列表類(lèi)型,函數(shù)可以直接運(yùn)用全局列表而不需求采用global進(jìn)展聲明。函數(shù)對(duì)變量的作用假設(shè)func()函數(shù)內(nèi)部存在一個(gè)真實(shí)創(chuàng)建過(guò)且稱(chēng)號(hào)為ls的列表,那么func()函數(shù)將操作該列表而不會(huì)修正全局變量,例子如下。函數(shù)對(duì)變量的作用總結(jié)一下,Python函數(shù)對(duì)變量的作用遵守如下原那么:簡(jiǎn)單數(shù)據(jù)類(lèi)型變量無(wú)論能否與全局變量重名,僅在函數(shù)內(nèi)部創(chuàng)建和運(yùn)用,函數(shù)退出后變量被釋放,如有全局同名變量,其值不變;簡(jiǎn)單數(shù)據(jù)類(lèi)型變量在用global保管字聲明后,作為全局變量運(yùn)用,函數(shù)退出后該變量保管且值被函數(shù)改動(dòng);函數(shù)對(duì)變量的作用對(duì)于組合數(shù)據(jù)類(lèi)型的全局變量,假設(shè)在函數(shù)內(nèi)部沒(méi)有被真實(shí)創(chuàng)建同名變量,那么函數(shù)內(nèi)部可以直接運(yùn)用并修正全局變量的值;假設(shè)函數(shù)內(nèi)部真實(shí)創(chuàng)建了組合數(shù)據(jù)類(lèi)型變量,無(wú)論能否有同名全局變量,函數(shù)僅對(duì)部分變量進(jìn)展操作,函數(shù)退出后部分變量被釋放,全局變量值不變。函數(shù)對(duì)變量的作用datetime庫(kù)的運(yùn)用以不同格式顯示日期和時(shí)間是程序中最常用到的功能。Python提供了一個(gè)處置時(shí)間的規(guī)范函數(shù)庫(kù)datetime,它提供了一系列由簡(jiǎn)單到復(fù)雜的時(shí)間處置方法。datetime庫(kù)可以從系統(tǒng)中獲得時(shí)間,并以用戶選擇的格式輸出。datetime庫(kù)以格林威治時(shí)間為根底,每天由3600*24秒精準(zhǔn)定義。該庫(kù)包括兩個(gè)常量:datetime.MINYEAR與datetime.MAXYEAR,分別表示datetime所能表示的最小、最大年份,值分別為1與9999。datetime庫(kù)概述datetime庫(kù)以類(lèi)的方式提供多種日期和時(shí)間表達(dá)方式:datetime.date:日期表示類(lèi),可以表示年、月、日等。datetime.time:時(shí)間表示類(lèi),可以表示小時(shí)、分鐘、秒、毫秒等datetime.datetime:日期和時(shí)間表示的類(lèi),功能覆蓋date和timedatetime.timedelta:時(shí)間間隔有關(guān)的類(lèi)。datetime.tzinfo:與時(shí)區(qū)有關(guān)的信息表示類(lèi)。datetime庫(kù)概述由于datetime.datetime類(lèi)表達(dá)方式最為豐富,主要引見(jiàn)這個(gè)類(lèi)的運(yùn)用。運(yùn)用datetime類(lèi)需求用import保管字,詳細(xì)援用datetime類(lèi)的方式如下:fromdatetimeimportdatetimedatetime庫(kù)概述datetime類(lèi)〔datetime.datetime類(lèi),以下簡(jiǎn)稱(chēng)為datetime類(lèi)〕的運(yùn)用方式是首先創(chuàng)建一個(gè)datetime對(duì)象,然后經(jīng)過(guò)對(duì)象的方法和屬性顯示時(shí)間。創(chuàng)建datetime對(duì)象共包括3個(gè)方法datetime.now()datetime.utcnow()datetime.datetime()datetime庫(kù)解析datetime.now()作用:前往一個(gè)datetime類(lèi)型,表示當(dāng)前的日期和時(shí)間,準(zhǔn)確到微秒。參數(shù):無(wú)datetime庫(kù)解析調(diào)用該函數(shù),執(zhí)行結(jié)果如下:datetime庫(kù)解析運(yùn)用datetime.utcnow()獲得當(dāng)前日期和時(shí)間對(duì)應(yīng)的UTC〔世界規(guī)范時(shí)間〕時(shí)間對(duì)象,運(yùn)用方法如下:datetime.utcnow()作用:前往一個(gè)datetime類(lèi)型,表示當(dāng)前日期和時(shí)間的UTC表示,準(zhǔn)確到微秒。參數(shù):無(wú)datetime庫(kù)解析調(diào)用該函數(shù),執(zhí)行結(jié)果如下:datetime庫(kù)解析datetime.now()和datetime.utcnow()都前往一個(gè)datetime類(lèi)型的對(duì)象,也可以直接運(yùn)用datetime()構(gòu)造一個(gè)日期和時(shí)間對(duì)象,運(yùn)用方法如下:datetime(year,month,day,hour=0,minute=0,second=0,microsecond=0)作用:前往一個(gè)datetime類(lèi)型,表示指定的日期和時(shí)間,可以準(zhǔn)確到微秒。datetime庫(kù)解析參數(shù):year:指定的年份,MINYEAR<=year<=MAXYEARmonth:指定的月份,1<=month<=12day:指定的日期,1<=day<=月份所對(duì)應(yīng)的日期上限hour:指定的小時(shí),0<=hour<24minute:指定的分?jǐn)?shù),0<=minute<60second:指定的秒數(shù),0<=second<60microsecond:指定的微秒數(shù),0<=microsecond<1000000datetime庫(kù)解析調(diào)用datetime()函數(shù)直接創(chuàng)建一個(gè)datetime對(duì)象,表示2021年9月16日22:33,32秒7微秒,執(zhí)行結(jié)果如下:datetime庫(kù)解析到此,程序曾經(jīng)有了一個(gè)datetime對(duì)象,進(jìn)一步可以利用這個(gè)對(duì)象的屬性顯示時(shí)間,為了區(qū)別datetime庫(kù)名,采用上例中的someday替代生成的datetime對(duì)象,常用屬性如表5.1所示datetime庫(kù)解析datetime庫(kù)解析屬性描述屬性someday.min固定返回datetime的最小時(shí)間對(duì)象,datetime(1,1,1,0,0)someday.minsomeday.max固定返回datetime的最大時(shí)間對(duì)象,datetime(9999,12,31,23,59,59,999999)someday.maxsomeday.year返回someday包含的年份someday.yearsomeday.month返回someday包含的月份someday.monthsomeday.day返回someday包含的日期someday.daysomeday.hour返回someday包含的小時(shí)someday.hoursomeday.minute返回someday包含的分鐘someday.minutesomeday.second返回someday包含的秒鐘someday.secondsomeday.microsecond返回someday包含的微秒值someday.microseconddatetime對(duì)象有3個(gè)常用的時(shí)間格式化方法,如表5.2所示。datetime庫(kù)解析屬性描述屬性s

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論