版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、函數(shù)的基本使用,函數(shù)是一段具有特定功能的、可重用的語句組,用函數(shù)名來表示并通過函數(shù)名完成功能調(diào)用。函數(shù)也可以看作一段具有名字的子程序,可以在需要的地方調(diào)用執(zhí)行,不需要在每個(gè)執(zhí)行地方重復(fù)編寫這些語句。每次使用函數(shù)可以提供不同的參數(shù)作為輸入,以實(shí)現(xiàn)對(duì)不同數(shù)據(jù)的處理;函數(shù)執(zhí)行后,還可以反饋相應(yīng)的結(jié)果。 函數(shù)能夠完成特定功能,與黑盒類似,對(duì)函數(shù)的使用不需要了解函數(shù)內(nèi)部實(shí)現(xiàn)原理,只要了解函數(shù)的輸入輸出方式即可。嚴(yán)格說,函數(shù)是一種功能抽象。,函數(shù)的定義,有些函數(shù)是用戶自己編寫的,稱為自定義函數(shù);Python安裝包也自帶了一些函數(shù)和方法,包括Python內(nèi)置的函數(shù)(如abs()、eval())、Python
2、標(biāo)準(zhǔn)庫中的函數(shù)(如math庫中的sqrt())等。,函數(shù)的定義,使用函數(shù)主要有兩個(gè)目的:降低編程難度和代碼重用。函數(shù)是一種功能抽象,利用它可以將一個(gè)復(fù)雜的大問題分解成一系列簡(jiǎn)單的小問題,然后將小問題繼續(xù)劃分成更小的問題,當(dāng)問題細(xì)化為足夠簡(jiǎn)單時(shí),就可以分而治之 函數(shù)可以在一個(gè)程序中多個(gè)位置使用,也可以用于多個(gè)程序,當(dāng)需要修改代碼時(shí),只需要在函數(shù)中修改一次,所有調(diào)用位置的功能都更新了,這種代碼重用降低了代碼行數(shù)和代碼維護(hù)難度。,函數(shù)的定義,Python定義一個(gè)函數(shù)使用def保留字,語法形式如下: def (): return ,函數(shù)的定義,函數(shù)名可以是任何有效的Python標(biāo)識(shí)符;參數(shù)列表是調(diào)用該
3、函數(shù)時(shí)傳遞給它的值,可以有零個(gè)、一個(gè)或多個(gè),當(dāng)傳遞多個(gè)參數(shù)時(shí)各參數(shù)由逗號(hào)分隔,當(dāng)沒有參數(shù)時(shí)也要保留圓括號(hào)。函數(shù)定義中參數(shù)列表里面的參數(shù)是形式參數(shù),簡(jiǎn)稱為“形參”。函數(shù)體是函數(shù)每次被調(diào)用時(shí)執(zhí)行的代碼,由一行或多行語句組成。如果需要返回值,使用保留字return和返回值列表。函數(shù)可以沒有return語句,在函數(shù)體結(jié)束位置將控制權(quán)返回給調(diào)用者。,函數(shù)的定義,函數(shù)調(diào)用和執(zhí)行的一般形式是: () 此時(shí),參數(shù)列表中給出要傳進(jìn)入函數(shù)內(nèi)部的參數(shù),這類參數(shù)稱為實(shí)際參數(shù),簡(jiǎn)稱為“實(shí)參”。,函數(shù)的定義,編寫程序?yàn)镸ike和Lily輸出生日歌。最簡(jiǎn)單的實(shí)現(xiàn)方法是重復(fù)使用print()語句,對(duì)Mike的生日歌輸出如下:
4、,微實(shí)例5.1:生日歌,其中,第1、2、4行代碼相同,假如需要將birthday改為new year,則每處都要修改。為了避免這種情況,可以用函數(shù)printHappy()進(jìn)行封裝。 除了Mike,如果再對(duì)Lily輸出生日歌,除第3行有微小不同外與上述代碼一致,這會(huì)帶來重復(fù)代碼。如果再有Eric, Adam呢?為了能夠復(fù)用語句,采用函數(shù)方式完成功能,代碼如下,微實(shí)例5.1:生日歌,微實(shí)例5.1:生日歌,該程序輸出效果如下:,微實(shí)例5.1:生日歌,微實(shí)例5.1代碼中第3行定義了一個(gè)函數(shù)happyB(),括號(hào)中name是形參,用來指代要輸入到函數(shù)的實(shí)際變量,并參與完成函數(shù)內(nèi)部功能。第8和10行兩次調(diào)
5、用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ù)體語句; (4)函數(shù)調(diào)用結(jié)束給出返回值,程序回到調(diào)用前的暫停處繼續(xù)執(zhí)行。,函數(shù)的調(diào)用過程,對(duì)微實(shí)例5.1的生日歌程序跟蹤分析。第1到7行是函數(shù)定義,函數(shù)只有在被調(diào)用時(shí)才執(zhí)行,因此,前7行代碼不直接執(zhí)行。程序最先執(zhí)行的語句是第8行的happyB(Mike)。當(dāng)Python執(zhí)行到這行時(shí),由于調(diào)用了happyB()函數(shù),當(dāng)前執(zhí)行暫停,程序用實(shí)參Mike替換happyB
6、(name)中的形參name,形參被賦值為實(shí)參的值,類似執(zhí)行了如下語句: name = Mike,函數(shù)的調(diào)用過程,然后,使用實(shí)參代替形參執(zhí)行函數(shù)體內(nèi)容。當(dāng)函數(shù)執(zhí)行完畢后,重新回到第8行,繼續(xù)執(zhí)行余下語句。函數(shù)第8行的執(zhí)行過程如圖5.1所示,這里函數(shù)happyB()的變量name被自動(dòng)替換為Mike。,函數(shù)的調(diào)用過程,當(dāng)程序執(zhí)行happyB()函數(shù)體時(shí),第一條執(zhí)行語句是happy()函數(shù),這也是一個(gè)函數(shù)調(diào)用。因此,Python暫停執(zhí)行happyB()函數(shù),將控制傳遞給被調(diào)用的函數(shù)happy()。happy()函數(shù)體包含了一個(gè)簡(jiǎn)單的print語句,該語句執(zhí)行后函數(shù)體結(jié)束,程序重新返回調(diào)用happy
7、()函數(shù)的位置。圖5.2給出了happy()函數(shù)調(diào)用和返回的執(zhí)行過程。,函數(shù)的調(diào)用過程,函數(shù)的調(diào)用過程,程序執(zhí)行完happyB()函數(shù)體后,返回調(diào)用該函數(shù)的原始位置,繼續(xù)執(zhí)行,如圖5.3所示。,函數(shù)的調(diào)用過程,lambda用于定義一種特殊的函數(shù)匿名函數(shù),又稱lambda函數(shù) 匿名函數(shù)并非沒有名字,而是將函數(shù)名作為函數(shù)結(jié)果返回 = lambda : lambda函數(shù)與正常函數(shù)一樣,等價(jià)于下面形式: def (): return ,lambda函數(shù),簡(jiǎn)單說,lambda函數(shù)用于定義簡(jiǎn)單的、能夠在一行內(nèi)表示的函數(shù),返回一個(gè)函數(shù)類型,實(shí)例如下。,lambda函數(shù),函數(shù)的參數(shù)傳遞,在定義函數(shù)時(shí),如果有些
8、參數(shù)存在默認(rèn)值,即部分參數(shù)不一定需要調(diào)用程序輸入,可以在定義函數(shù)時(shí)直接為這些參數(shù)指定默認(rèn)值。當(dāng)函數(shù)被調(diào)用時(shí),如果沒有傳入對(duì)應(yīng)的參數(shù)值,則使用函數(shù)定義時(shí)的默認(rèn)值替代,例如:,可選參數(shù)和可變數(shù)量參數(shù),由于函數(shù)調(diào)用時(shí)需要按順序輸入?yún)?shù),可選參數(shù)必須定義在非可選參數(shù)的后面,即dup()函數(shù)中帶默認(rèn)值的可選參數(shù)times必須定義在str參數(shù)后面。 在函數(shù)定義時(shí),也可以設(shè)計(jì)可變數(shù)量參數(shù),通過參數(shù)前增加星號(hào)(*)實(shí)現(xiàn)。帶有星號(hào)的可變參數(shù)只能出現(xiàn)在參數(shù)列表的最后。調(diào)用時(shí),這些參數(shù)被當(dāng)作元組類型傳遞到函數(shù)中,實(shí)例如下。,可選參數(shù)和可變數(shù)量參數(shù),vfunc()函數(shù)定義了可變參數(shù)b,調(diào)用vfunc()函數(shù)時(shí)輸入的(
9、2, 3, 4, 5)被當(dāng)作元組傳遞給b,與a累加后輸出。第6.1節(jié)將詳細(xì)介紹元組類型,這里請(qǐng)讀者將元組理解為一組元素。,可選參數(shù)和可變數(shù)量參數(shù),函數(shù)調(diào)用時(shí),實(shí)參默認(rèn)采用按照位置順序的方式傳遞給函數(shù),例如dup(knock,4)中第一個(gè)實(shí)參默認(rèn)賦值給形參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ù)的位置和名稱傳遞,它的一個(gè)實(shí)際調(diào)用如下: result = func(1, 2, 3, 4, 5, 6,)
10、 如果僅看實(shí)際調(diào)用而不找到函數(shù)定義,很難理解這些輸入?yún)?shù)的含義。在規(guī)模稍大的程序中,函數(shù)定義可能在函數(shù)庫中,也可能與調(diào)用相差很遠(yuǎn),帶來較差的可讀性。,參數(shù)的位置和名稱傳遞,為了解決上述問題,Python提供了按照形參名稱輸入實(shí)參的方式,函數(shù)調(diào)用如下: result = func(x2=4, y2=5, z2=6, x1=1, y1=2, z1=3) 由于調(diào)用函數(shù)時(shí)指定了參數(shù)名稱,所以參數(shù)之間的順序可以任意調(diào)整。,參數(shù)的位置和名稱傳遞,return語句用來退出函數(shù)并將程序返回到函數(shù)被調(diào)用的位置繼續(xù)執(zhí)行。return語句同時(shí)可以將0個(gè)、1個(gè)或多個(gè)函數(shù)運(yùn)算完的結(jié)果返回給函數(shù)被調(diào)用處的變量,例如。,變
11、量的返回值,函數(shù)可以沒有return,此時(shí)函數(shù)并不返回值,如微實(shí)例5.1的happy()函數(shù)。函數(shù)也可以用return返回多個(gè)值,多個(gè)值以元組類型保存,變量的返回值,一個(gè)程序中的變量包括兩類:全局變量和局部變量。全局變量指在函數(shù)之外定義的變量,一般沒有縮進(jìn),在程序執(zhí)行全過程有效。局部變量指在函數(shù)內(nèi)部使用的變量,僅在函數(shù)內(nèi)部有效,當(dāng)函數(shù)退出時(shí)變量將不存在。例子如下。,函數(shù)對(duì)變量的作用,函數(shù)對(duì)變量的作用,這個(gè)例子說明,當(dāng)函數(shù)執(zhí)行完退出后,其內(nèi)部變量將被釋放。如果函數(shù)內(nèi)部使用了全局變量呢?例子如下。,函數(shù)對(duì)變量的作用,函數(shù)func()內(nèi)部使用了變量n,并且將變量參數(shù)b賦值給變量n,為何n值沒有改變?
12、函數(shù)func()有自己的內(nèi)存空間,它將n=b語句理解為生成一個(gè)局部變量n,并將參數(shù)b賦值給它,此時(shí)func()函數(shù)沒有將n當(dāng)作全局變量。所以,函數(shù)退出后,局部變量n被釋放,全局變量n的值沒有修改。,函數(shù)對(duì)變量的作用,如果希望讓func()函數(shù)將n當(dāng)作全局變量,需要在變量n使用前顯式聲明該變量為全局變量,代碼如下。,函數(shù)對(duì)變量的作用,如果此時(shí)的全局變量不是整數(shù)n,而是列表類型ls,會(huì)怎么樣呢?理解如下代碼。,函數(shù)對(duì)變量的作用,請(qǐng)讀者注意,奇跡產(chǎn)生了,全局列表變量在函數(shù)func()調(diào)用后竟然發(fā)生了改變! 列表等組合數(shù)據(jù)類型由于操作多個(gè)數(shù)據(jù),所以它們?cè)谑褂弥杏袆?chuàng)建和引用的分別。當(dāng)列表變量被方括號(hào)(,
13、無論是否為空)賦值時(shí),這個(gè)列表才被真實(shí)創(chuàng)建,否則只是對(duì)之前創(chuàng)建列表的一次引用。,函數(shù)對(duì)變量的作用,上述代碼func()函數(shù)的ls.append(b)語句執(zhí)行時(shí)需要一個(gè)真實(shí)創(chuàng)建過的列表,此時(shí)func()函數(shù)專屬的內(nèi)存空間中沒有已經(jīng)創(chuàng)建過且名稱為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)單說,對(duì)于列表類型,函數(shù)可以直接使用全局列表而不需要采用global進(jìn)行聲明。,函數(shù)對(duì)變量的作用,如果func()函數(shù)內(nèi)部存在一個(gè)真實(shí)創(chuàng)建過且名稱為ls的列表,則func()函數(shù)將操作該列表而不會(huì)修改全局變
14、量,例子如下。,函數(shù)對(duì)變量的作用,總結(jié)一下,Python函數(shù)對(duì)變量的作用遵守如下原則: 簡(jiǎn)單數(shù)據(jù)類型變量無論是否與全局變量重名,僅在函數(shù)內(nèi)部創(chuàng)建和使用,函數(shù)退出后變量被釋放,如有全局同名變量,其值不變; 簡(jiǎn)單數(shù)據(jù)類型變量在用global保留字聲明后,作為全局變量使用,函數(shù)退出后該變量保留且值被函數(shù)改變;,函數(shù)對(duì)變量的作用,對(duì)于組合數(shù)據(jù)類型的全局變量,如果在函數(shù)內(nèi)部沒有被真實(shí)創(chuàng)建同名變量,則函數(shù)內(nèi)部可以直接使用并修改全局變量的值; 如果函數(shù)內(nèi)部真實(shí)創(chuàng)建了組合數(shù)據(jù)類型變量,無論是否有同名全局變量,函數(shù)僅對(duì)局部變量進(jìn)行操作,函數(shù)退出后局部變量被釋放,全局變量值不變。,函數(shù)對(duì)變量的作用,datetim
15、e庫的使用,以不同格式顯示日期和時(shí)間是程序中最常用到的功能。Python提供了一個(gè)處理時(shí)間的標(biāo)準(zhǔn)函數(shù)庫datetime,它提供了一系列由簡(jiǎn)單到復(fù)雜的時(shí)間處理方法。datetime庫可以從系統(tǒng)中獲得時(shí)間,并以用戶選擇的格式輸出。 datetime庫以格林威治時(shí)間為基礎(chǔ),每天由3600*24秒精準(zhǔn)定義。該庫包括兩個(gè)常量:datetime.MINYEAR與datetime.MAXYEAR,分別表示datetime所能表示的最小、最大年份,值分別為1與9999。,datetime庫概述,datetime庫以類的方式提供多種日期和時(shí)間表達(dá)方式: datetime.date:日期表示類,可以表示年、月、日
16、等。 datetime.time:時(shí)間表示類,可以表示小時(shí)、分鐘、秒、毫秒等 datetime.datetime:日期和時(shí)間表示的類,功能覆蓋date和time datetime.timedelta:時(shí)間間隔有關(guān)的類。 datetime.tzinfo:與時(shí)區(qū)有關(guān)的信息表示類。,datetime庫概述,由于datetime.datetime類表達(dá)形式最為豐富,主要介紹這個(gè)類的使用。使用datetime類需要用import保留字,具體引用datetime類的方式如下: from datetime import datetime,datetime庫概述,datetime類(datetime.date
17、time類,以下簡(jiǎn)稱為datetime類)的使用方式是首先創(chuàng)建一個(gè)datetime對(duì)象,然后通過對(duì)象的方法和屬性顯示時(shí)間。創(chuàng)建datetime對(duì)象共包括3個(gè)方法 datetime.now() datetime.utcnow() datetime.datetime(),datetime庫解析,datetime.now() 作用:返回一個(gè)datetime類型,表示當(dāng)前的日期和時(shí)間,精確到微秒。 參數(shù): 無,datetime庫解析,調(diào)用該函數(shù),執(zhí)行結(jié)果如下:,datetime庫解析,使用datetime.utcnow()獲得當(dāng)前日期和時(shí)間對(duì)應(yīng)的UTC(世界標(biāo)準(zhǔn)時(shí)間)時(shí)間對(duì)象,使用方法如下: date
18、time.utcnow() 作用:返回一個(gè)datetime類型,表示當(dāng)前日期和時(shí)間的UTC表示,精確到微秒。 參數(shù):無,datetime庫解析,調(diào)用該函數(shù),執(zhí)行結(jié)果如下:,datetime庫解析,datetime.now()和datetime.utcnow()都返回一個(gè)datetime類型的對(duì)象,也可以直接使用datetime()構(gòu)造一個(gè)日期和時(shí)間對(duì)象,使用方法如下: datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0) 作用:返回一個(gè)datetime類型,表示指定的日期和時(shí)間,可以精確到微秒。,datetime庫解析,參數(shù): year: 指定的年份,MINYEAR = year = MAXYEAR month: 指定的月份,1 =
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年遼寧城市建設(shè)職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性考試題庫附答案解析
- 2025年遼寧經(jīng)濟(jì)職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)傾向性測(cè)試題庫帶答案解析
- 2025年重慶電信職業(yè)學(xué)院?jiǎn)握新殬I(yè)傾向性測(cè)試題庫附答案解析
- 2025年長(zhǎng)春市建筑職工業(yè)余大學(xué)馬克思主義基本原理概論期末考試模擬題附答案解析
- 2025年青海柴達(dá)木職業(yè)技術(shù)學(xué)院馬克思主義基本原理概論期末考試模擬題及答案解析(奪冠)
- 2026年手術(shù)室考試試題及答案
- 保潔安全培訓(xùn)制度
- 法院定期培訓(xùn)制度匯編
- 冰箱存儲(chǔ)制度規(guī)范
- 教導(dǎo)隊(duì)培訓(xùn)制度
- 非連續(xù)性文本閱讀(中考試題20篇)-2024年中考語文重難點(diǎn)復(fù)習(xí)攻略(解析版)
- 專題13 三角函數(shù)中的最值模型之胡不歸模型(原卷版)
- 門診藥房西藥管理制度
- 新能源汽車生產(chǎn)代工合同
- 2025年中煤科工集團(tuán)重慶研究院有限公司招聘筆試參考題庫含答案解析
- 消防救援預(yù)防職務(wù)犯罪
- 一體化泵站安裝施工方案
- 畜禽糞污資源化利用培訓(xùn)
- 《搶救藥物知識(shí)》課件
- 廣州數(shù)控GSK 980TDc車床CNC使用手冊(cè)
- 校區(qū)打印店合作服務(wù) 投標(biāo)方案(技術(shù)方案)
評(píng)論
0/150
提交評(píng)論