




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
任務(wù)1認(rèn)識(shí)Python函數(shù)01任務(wù)2應(yīng)用Python內(nèi)置函數(shù)02任務(wù)3Python常用參數(shù)的使用03216任務(wù)4變量作用域和global變量的使用04任務(wù)5Python高階函數(shù)和lambda表達(dá)式的使用05任務(wù)6Python函數(shù)修飾器的使用06任務(wù)1
認(rèn)識(shí)Python函數(shù)2171.?掌握Python函數(shù)的定義和調(diào)用方法。2.?掌握Python函數(shù)值傳遞和引用傳遞方法。3.?了解Python函數(shù)參數(shù)傳遞機(jī)制。4.?掌握Python?None(空值)的使用方法。5.?掌握return語(yǔ)句的使用方法。任務(wù)目標(biāo)218一、Python函數(shù)的定義和調(diào)用1.?Python函數(shù)的定義Python函數(shù)的定義,就是創(chuàng)建一個(gè)函數(shù),可以理解為創(chuàng)建一個(gè)實(shí)現(xiàn)某種用途的工具。定義函數(shù)需要用def關(guān)鍵字實(shí)現(xiàn),具體的語(yǔ)法格式如下。def函數(shù)名(參數(shù)列表)://實(shí)現(xiàn)特定用途的代碼[return[返回值]]相關(guān)知識(shí)219各參數(shù)的含義如下?!窈瘮?shù)名:必須是一個(gè)符合Python語(yǔ)法的標(biāo)識(shí)符,不建議使用a、b、c這類簡(jiǎn)單的標(biāo)識(shí)符作為函數(shù)名,這不利于在開發(fā)中代碼塊的維護(hù)和修改,函數(shù)名最好能夠體現(xiàn)該函數(shù)的功能?!駞?shù)列表:設(shè)置該函數(shù)可以接收多少個(gè)參數(shù),各個(gè)參數(shù)之間用逗號(hào)分隔,參數(shù)列表也可以為空。●[return[返回值]]:整體作為函數(shù)的可選參數(shù),用于設(shè)置該函數(shù)的返回值。也就是說(shuō),一個(gè)函數(shù)可以有返回值,也可以沒有返回值,是否需要返回值,應(yīng)根據(jù)實(shí)際情況而定。220在Python中,如果想定義一個(gè)沒有任何功能的空函數(shù),在函數(shù)內(nèi)部使用pass作為占位符,示例如下。defpass_a():pass雖然Python允許定義空函數(shù),但函數(shù)本身沒有實(shí)際意義。另外,函數(shù)中的return語(yǔ)句可以直接返回一個(gè)表達(dá)式的值,例如以下程序。defstr_max(str1,str2):returnstr1ifstr1>str2elsestr22212.?Python函數(shù)的調(diào)用Python函數(shù)的調(diào)用,就是執(zhí)行函數(shù)。如果把創(chuàng)建的函數(shù)理解為一個(gè)具有某種用途的工具,那么調(diào)用函數(shù)就相當(dāng)于使用該工具。函數(shù)調(diào)用的基本語(yǔ)法格式如下。[返回值]=函數(shù)名([形參值])其中,函數(shù)名是指要調(diào)用的函數(shù)的名稱;形參值是指形式上的參數(shù)(簡(jiǎn)稱形參)的值,形參的作用是以變量的形式來(lái)傳遞當(dāng)前未知的值(后面會(huì)對(duì)其進(jìn)行詳細(xì)說(shuō)明)。如果該函數(shù)有返回值,可以通過(guò)一個(gè)變量來(lái)接收該返回值,也可以不接收。222注意:創(chuàng)建函數(shù)時(shí)有多少個(gè)形參,調(diào)用時(shí)就需要傳入多少個(gè)值,且順序必須和創(chuàng)建函數(shù)時(shí)一致。即便該函數(shù)沒有參數(shù),函數(shù)名后的小括號(hào)也不能省略。首先,對(duì)于調(diào)用空函數(shù)來(lái)說(shuō),由于函數(shù)本身并不包含任何有價(jià)值的執(zhí)行代碼,也沒有返回值,所以調(diào)用空函數(shù)不會(huì)有任何效果。其次,對(duì)于上面的程序中對(duì)str_max函數(shù)的調(diào)用,由于當(dāng)初定義該函數(shù)時(shí)為其設(shè)置了兩個(gè)參數(shù),所以這里在調(diào)用該函數(shù)時(shí)就必須傳入兩個(gè)參數(shù)。同時(shí),由于該函數(shù)內(nèi)部還使用了return語(yǔ)句,所以可以使用string_max變量來(lái)接收該函數(shù)的返回值。程序執(zhí)行結(jié)果如下。/223二、Python函數(shù)值傳遞和引用傳遞通常情況下,定義函數(shù)時(shí)都會(huì)選擇有參數(shù)的函數(shù)形式,函數(shù)參數(shù)的作用是傳遞數(shù)據(jù)給函數(shù),令其對(duì)接收的數(shù)據(jù)做出具體的操作處理。在使用函數(shù)時(shí),經(jīng)常會(huì)用到形式參數(shù)和實(shí)際參數(shù)(簡(jiǎn)稱實(shí)參),兩者都稱為參數(shù),區(qū)別如下。形式參數(shù):在定義函數(shù)時(shí),函數(shù)名后面括號(hào)中的參數(shù)就是形式參數(shù),示例如下。defdemo(obj):#定義函數(shù)時(shí),這里的函數(shù)參數(shù)obj就是形式參數(shù)print(obj)224實(shí)際參數(shù):在調(diào)用函數(shù)時(shí),函數(shù)名后面括號(hào)中的參數(shù)就是實(shí)際參數(shù),即函數(shù)的調(diào)用者給函數(shù)的參數(shù),示例如下。a="不忘初心"demo(a)#調(diào)用已經(jīng)定義好的demo函數(shù),此時(shí)傳入的函數(shù)參數(shù)a就是實(shí)際參數(shù)簡(jiǎn)單而言,定義函數(shù)時(shí)的參數(shù)是形式參數(shù),調(diào)用函數(shù)時(shí)的參數(shù)是實(shí)際參數(shù)。225在Python中,根據(jù)實(shí)際參數(shù)的類型不同,函數(shù)參數(shù)的傳遞方式可分為值傳遞和引用(地址)傳遞兩種。值傳遞適用于實(shí)際參數(shù)類型為不可變類型(如字符串、數(shù)字、元組);引用傳遞適用于實(shí)際參數(shù)類型為可變類型(如列表、字典)。值傳遞和引用傳遞的區(qū)別是,函數(shù)參數(shù)進(jìn)行值傳遞后,形式參數(shù)的值發(fā)生改變,不會(huì)影響實(shí)際參數(shù)的值;而函數(shù)參數(shù)進(jìn)行引用傳遞后,改變形式參數(shù)的值,實(shí)際參數(shù)的值也會(huì)一同改變。226三、Python函數(shù)參數(shù)傳遞機(jī)制1.?Python函數(shù)參數(shù)的值傳遞機(jī)制在Python中,如果實(shí)際參數(shù)的數(shù)據(jù)類型是不可變對(duì)象(如整數(shù)、字符串、元組等),則函數(shù)參數(shù)的傳遞方式是按值傳遞。函數(shù)參數(shù)的值傳遞是指將實(shí)際參數(shù)值的副本(復(fù)制品)傳入函數(shù),由于傳入函數(shù)的是實(shí)際參數(shù)值的復(fù)制品,所以不管在函數(shù)中對(duì)這個(gè)復(fù)制品進(jìn)行怎樣的操作,實(shí)際參數(shù)本身不會(huì)受到任何影響。227下面的程序演示了函數(shù)參數(shù)進(jìn)行值傳遞的效果。defswap(a,b):#下面的代碼實(shí)現(xiàn)a、b變量的值交換a,b=b,aprint("swap函數(shù)里,a的值是",a,";b的值是",b)a=9b=6swap(a,b)print("交換結(jié)束后,變量a的值是",a,";變量b的值是",b)228程序運(yùn)行結(jié)果如下。swap函數(shù)里,a的值是6;b的值是9交換結(jié)束后,變量a的值是9;變量b的值是6從上面的運(yùn)行結(jié)果來(lái)看,在swap函數(shù)中,a和b的值分別是6、9,交換結(jié)束后,a和b的值分別是9、6。從這個(gè)運(yùn)行結(jié)果可以看出,主程序中實(shí)際定義的變量a和b并不是swap函數(shù)中的a和b。正如前面所述,swap函數(shù)中的a和b只是主程序中變量a和b的復(fù)制品。下面通過(guò)示意圖來(lái)說(shuō)明上面程序的執(zhí)行過(guò)程。229上面的程序定義了a、b兩個(gè)局部變量,這兩個(gè)變量在內(nèi)存中的存儲(chǔ)示意圖如圖所示。當(dāng)程序執(zhí)行swap函數(shù)時(shí),系統(tǒng)進(jìn)入swap函數(shù),并將主程序中的a、b變量作為參數(shù)值傳入swap函數(shù),但傳入swap函數(shù)的只是a、b的副本,而不是a、b本身。230主棧區(qū)中a、b變量存儲(chǔ)示意圖當(dāng)在主程序中調(diào)用swap函數(shù)時(shí),系統(tǒng)分別為主程序和swap函數(shù)分配兩塊棧區(qū),用于保存它們的局部變量。這兩個(gè)棧區(qū)分別為主(程序)棧區(qū)和swap函數(shù)棧區(qū)。將主棧區(qū)中的a、b變量作為參數(shù)值傳入swap函數(shù),實(shí)際上是在swap函數(shù)棧區(qū)中重新產(chǎn)生了兩個(gè)變量a、b,并將主棧區(qū)中a、b變量的值分別賦給swap函數(shù)棧區(qū)中的a、b兩個(gè)變量,即對(duì)swap函數(shù)棧區(qū)中的a、b兩個(gè)變量進(jìn)行初始化。此時(shí),系統(tǒng)中存在兩個(gè)a變量、兩個(gè)b變量,只是存在于不同的棧區(qū)中而已。如圖所示為將主棧區(qū)中的變量作為參數(shù)值傳入swap函數(shù)棧區(qū)后的存儲(chǔ)示意圖。231232將主棧區(qū)中的變量作為參數(shù)值傳入swap函數(shù)棧區(qū)后的存儲(chǔ)示意圖程序在swap函數(shù)中交換a、b兩個(gè)變量的值,實(shí)際上是對(duì)上圖中swap函數(shù)棧區(qū)的a、b變量進(jìn)行交換。交換結(jié)束后,輸出swap函數(shù)中a、b變量的值。此時(shí)a、b在內(nèi)存中的存儲(chǔ)示意圖如圖所示。233swap函數(shù)中a、b交換后在內(nèi)存中的存儲(chǔ)示意圖2.?Python函數(shù)參數(shù)的引用傳遞機(jī)制如果實(shí)際參數(shù)的數(shù)據(jù)類型是可變對(duì)象(如列表、字典),則函數(shù)參數(shù)的傳遞方式將采用引用傳遞。注意:引用傳遞方式的底層實(shí)現(xiàn)采用的依然是值傳遞的方式。下面的程序演示了引用傳遞參數(shù)的效果。defswap(value):#下面的代碼實(shí)現(xiàn)value的a、b兩個(gè)元素的值交換value['a'],value['b']=value['b'],value['a']print("swap函數(shù)里,a元素的值是",value['a'],";b元素的值是",value['b'])234value={'a':6,'b':9}swap(value)print("交換結(jié)束后,a元素的值是",value['a'],";b元素的值是",value['b'])程序運(yùn)行結(jié)果如下。swap函數(shù)里,a元素的值是9;b元素的值是6交換結(jié)束后,a元素的值是9;b元素的值是6235從上面的運(yùn)行結(jié)果來(lái)看,在swap函數(shù)中,value字典的a、b兩個(gè)元素的值被交換成功。不僅如此,當(dāng)swap函數(shù)執(zhí)行結(jié)束后,主程序中value字典的a、b兩個(gè)元素的值也被交換了。這很容易造成一種錯(cuò)覺,即在調(diào)用swap函數(shù)時(shí),傳入swap函數(shù)的就是value字典本身,而不是它的復(fù)制品。事實(shí)上并非如此,下面結(jié)合示意圖來(lái)說(shuō)明程序的執(zhí)行過(guò)程。236程序開始創(chuàng)建了一個(gè)字典對(duì)象,并定義了一個(gè)引用變量value(其實(shí)就是一個(gè)指針)指向字典對(duì)象,這意味著此時(shí)內(nèi)存中有兩個(gè)東西:對(duì)象本身和指向該對(duì)象的引用變量。主程序創(chuàng)建了字典對(duì)象后的存儲(chǔ)示意圖如圖所示。237主程序創(chuàng)建了字典對(duì)象后的存儲(chǔ)示意圖接下來(lái)主程序開始調(diào)用swap函數(shù),在調(diào)用swap函數(shù)時(shí),value變量作為參數(shù)傳入swap函數(shù),這里依然采用值傳遞方式,即把主程序中value變量的值賦給swap函數(shù)中value的形參,從而完成swap函數(shù)中value參數(shù)的初始化。注意:主程序中的value是一個(gè)引用變量(也就是一個(gè)指針),它保存了字典對(duì)象的地址值,當(dāng)把value的值賦給swap函數(shù)中value的形參后,讓swap函數(shù)的value參數(shù)也保存這個(gè)地址值,即也會(huì)引用同一個(gè)字典對(duì)象。下圖顯示了value字典傳入swap函數(shù)后的存儲(chǔ)示意圖。238從上圖可以看出,這種參數(shù)傳遞方式是值傳遞方式,系統(tǒng)復(fù)制了value的副本傳入swap函數(shù)。由于value只是一個(gè)引用變量,所以系統(tǒng)復(fù)制的是value變量,并未復(fù)制字典本身。239value字典傳入swap函數(shù)后的存儲(chǔ)示意圖當(dāng)程序在swap函數(shù)中操作value參數(shù)時(shí),由于value只是一個(gè)引用變量,故實(shí)際操作的還是字典對(duì)象。此時(shí),不管是操作主程序中的value變量,還是操作swap函數(shù)中的value參數(shù),其實(shí)操作的都是它們共同引用的字典對(duì)象。因此,當(dāng)在swap函數(shù)中交換value參數(shù)所引用字典對(duì)象的a、b兩個(gè)元素的值時(shí),可以看到在主程序中value變量所引用字典對(duì)象的a、b兩個(gè)元素的值也被交換了。為了更好地證明主程序中的value和swap函數(shù)中的value是兩個(gè)變量,在swap函數(shù)的最后一行增加如下代碼。#把value直接賦值為None,讓它不再指向任何對(duì)象value=None240運(yùn)行上面的程序,結(jié)果是swap函數(shù)中的value變量不再指向任何對(duì)象,程序其他地方?jīng)]有任何改變。主程序調(diào)用swap函數(shù)后,再次訪問(wèn)value變量的a、b兩個(gè)元素,依然可以輸出9、6??梢姡鞒绦蛑械膙alue變量沒有受到任何影響。將swap函數(shù)中的value賦值為None后的存儲(chǔ)示意圖如圖所示。241將swap函數(shù)中的value賦值為None后的存儲(chǔ)示意圖從上圖可以看出,把swap函數(shù)中的value賦值為None后,在swap函數(shù)中失去了對(duì)字典對(duì)象的引用,不可再訪問(wèn)該字典對(duì)象,但主程序中的value變量不受任何影響,依然可以引用該字典對(duì)象,因此依然可以輸出字典對(duì)象的a、b元素值。通過(guò)上述的介紹可以得出如下兩個(gè)結(jié)論。(1)不管什么類型的參數(shù),在Python函數(shù)中對(duì)參數(shù)直接使用等號(hào)賦值是沒用的,直接使用等號(hào)賦值并不能改變參數(shù)。(2)如需讓函數(shù)修改某些數(shù)據(jù),可以把這些數(shù)據(jù)包裝成列表、字典等可變對(duì)象,然后把列表、字典等可變對(duì)象作為參數(shù)傳入函數(shù),在函數(shù)中通過(guò)列表、字典的方法修改它們,從而成功地改變這些數(shù)據(jù)。242四、PythonNone(空值)的使用在Python中,有一個(gè)特殊的常量None(N必須大寫),和False不同,它不表示0,也不表示空字符串,而表示沒有值,也就是空值。這里的空值并不代表空對(duì)象,即None和[]、""不同,例如以下程序。>>>Noneis[]False>>>Noneis""False243None有自己的數(shù)據(jù)類型,可以在交互模式中使用type函數(shù)查看它的數(shù)據(jù)類型,執(zhí)行代碼如下。>>>type(None)<class'NoneType'>可以看到,它屬于NoneType類型。注意:None是NoneType類型的唯一值(其他編程語(yǔ)言可能稱這個(gè)值為null、nil或unde?ned),也就是說(shuō),不能再創(chuàng)建其他NoneType類型的變量,但是可以將None賦給任何變量。如果希望變量中存儲(chǔ)的內(nèi)容不與任何其他值混淆,就可以使用None。除此之外,None常用于assert、判斷函數(shù)有無(wú)返回值。244五、return語(yǔ)句的使用方法目前,我們創(chuàng)建的函數(shù)都只是對(duì)傳入的數(shù)據(jù)進(jìn)行了處理,處理完了就結(jié)束,但實(shí)際上,在某些場(chǎng)景中,還需要函數(shù)將處理的結(jié)果反饋回來(lái),前面所述的函數(shù)基本語(yǔ)法格式也有所提及。在Python中,用def語(yǔ)句創(chuàng)建函數(shù)時(shí),可以用return語(yǔ)句指定應(yīng)該返回的值,該返回值可以是任意類型。注意:return語(yǔ)句在同一函數(shù)中可以出現(xiàn)多次,但只要有一個(gè)得到執(zhí)行,就會(huì)直接結(jié)束函數(shù)的執(zhí)行。在函數(shù)中,使用return語(yǔ)句的語(yǔ)法格式如下。return[返回值]其中,返回值參數(shù)可以指定,也可以省略不寫(將返回空值None)。245通過(guò)return語(yǔ)句指定返回值后,在調(diào)用函數(shù)時(shí),既可以將該函數(shù)的返回值賦給一個(gè)變量,用變量保存函數(shù)的返回值,又可以將函數(shù)的返回值作為某個(gè)函數(shù)的實(shí)際參數(shù)??梢钥吹?,函數(shù)中可以同時(shí)包含多個(gè)return語(yǔ)句,但最終真正執(zhí)行的只有一個(gè),一旦執(zhí)行了一個(gè)return語(yǔ)句,就會(huì)立即結(jié)束函數(shù)的執(zhí)行。在以上示例中函數(shù)都通過(guò)return語(yǔ)句返回了指定值,但都只返回了一個(gè)值,事實(shí)上,Python能通過(guò)return語(yǔ)句返回多個(gè)值,Python函數(shù)可以通過(guò)返回列表或元組的方式將需要返回的多個(gè)值保存到序列中,間接達(dá)到返回多個(gè)值的目的。246任務(wù)2
應(yīng)用Python內(nèi)置函數(shù)2471.?掌握Python內(nèi)置函數(shù)的概念與使用方法。2.?能使用Python內(nèi)置函數(shù)創(chuàng)建和修改列表。任務(wù)目標(biāo)248Python內(nèi)置函數(shù)在Python中占有非常重要的地位,熟練使用Python內(nèi)置函數(shù)對(duì)學(xué)習(xí)和使用Python非常重要。Python官方文檔給出的Python內(nèi)置函數(shù)見下表,常用的有zip函數(shù)、reversed函數(shù)和sorted函數(shù)等。相關(guān)知識(shí)249250Python內(nèi)置函數(shù)251一、zip函數(shù)及用法zip函數(shù)是Python內(nèi)置函數(shù)之一,它可以將多個(gè)序列,如列表、元組、字典、集合、字符串以及range區(qū)間構(gòu)成的列表“壓縮”成一個(gè)zip對(duì)象。所謂“壓縮”,其實(shí)就是將這些序列中對(duì)應(yīng)位置的元素重新組合,生成一個(gè)個(gè)新的元組。zip函數(shù)的語(yǔ)法格式如下。zip(iterable,…)其中,“iterable,…”表示多個(gè)列表、元組、字典、集合、字符串,甚至可以是range區(qū)間。252zip函數(shù)的使用方法如下。list1=['aa','bb','cc']tup1=(11,22,33)print([xforxinzip(list1,tup1)])程序運(yùn)行結(jié)果如下。[('aa',11),('bb',22),('cc',33)]注意:在使用zip函數(shù)“壓縮”多個(gè)序列時(shí),它會(huì)分別取各序列中第1個(gè)元素、第2個(gè)元素、…、第n個(gè)元素,各自組成新的元組。當(dāng)多個(gè)序列中元素個(gè)數(shù)不一致時(shí),會(huì)以最短的序列為準(zhǔn)進(jìn)行壓縮。253另外,對(duì)于zip函數(shù)返回的zip對(duì)象,既可以像上面的程序那樣,通過(guò)遍歷提取其存儲(chǔ)的元組,又可以像下面的程序這樣,通過(guò)調(diào)用list函數(shù)將zip對(duì)象強(qiáng)制轉(zhuǎn)換成列表。list1=['aa','bb','cc']tup1=(11,22,33)print(list(zip(list1,tup1)))程序運(yùn)行結(jié)果如下。[('aa',11),('bb',22),('cc',33)]254二、reversed函數(shù)及用法reversed函數(shù)是Python內(nèi)置函數(shù)之一,其功能是對(duì)于給定的序列,包括列表、元組、字符串以及range區(qū)間,可以返回一個(gè)逆序序列的迭代器(用于遍歷該逆序序列)。reversed函數(shù)的語(yǔ)法格式如下。reversed(seq)其中,seq可以是列表、元組、字符串以及range生成的區(qū)間列表。255三、sorted函數(shù)及用法sorted函數(shù)作為Python內(nèi)置函數(shù)之一,其功能是對(duì)序列(列表、元組、字典、集合、字符串等)進(jìn)行排序。sorted函數(shù)的基本語(yǔ)法格式如下。list=sorted(iterable,key=None,reverse=False)其中,iterable表示指定的序列,key參數(shù)可以自定義排序規(guī)則,reverse參數(shù)指定以升序(False,默認(rèn))還是降序(True)進(jìn)行排序。sorted函數(shù)會(huì)返回一個(gè)排好序的列表。任務(wù)3
Python常用參數(shù)的使用2561.?了解位置參數(shù)的基本概念。2.?了解缺省參數(shù)的基本概念。3.?了解可變參數(shù)的基本概念。4.?了解關(guān)鍵字參數(shù)的基本概念。5.?了解命名關(guān)鍵字參數(shù)的基本概念。6.?掌握各類參數(shù)的使用方法并能正確使用。任務(wù)目標(biāo)257一、位置參數(shù)位置參數(shù),有時(shí)也被稱為必備參數(shù),是指在調(diào)用函數(shù)時(shí)必須按照正確的順序?qū)?shí)際參數(shù)傳遞給函數(shù)。換句話說(shuō),調(diào)用函數(shù)時(shí)傳入的實(shí)際參數(shù)數(shù)量和位置必須與定義函數(shù)時(shí)所期望的一致。在調(diào)用函數(shù)時(shí),實(shí)際參數(shù)的數(shù)量和形式參數(shù)的數(shù)量必須匹配。這意味著在函數(shù)調(diào)用過(guò)程中,傳遞的實(shí)際參數(shù)數(shù)量必須與函數(shù)定義中指定的形式參數(shù)數(shù)量相同,否則Python解釋器將引發(fā)TypeError異常,并提示缺少必要的位置參數(shù)。無(wú)論傳遞的實(shí)際參數(shù)多了還是少了,都會(huì)導(dǎo)致函數(shù)調(diào)用失敗。相關(guān)知識(shí)258259二、缺省參數(shù)定義函數(shù)時(shí),可以給某個(gè)參數(shù)指定一個(gè)默認(rèn)值,具有默認(rèn)值的參數(shù)叫作缺省參數(shù),又叫默認(rèn)參數(shù)。調(diào)用函數(shù)時(shí),如果沒有傳入缺省參數(shù)的值,則在函數(shù)內(nèi)部使用定義時(shí)指定參數(shù)默認(rèn)值。注意:必須保證帶有默認(rèn)值的缺省參數(shù)在參數(shù)列表末尾。在調(diào)用函數(shù)時(shí),如果有多個(gè)缺省參數(shù),則需要指定參數(shù)名。Python定義帶有缺省參數(shù)的函數(shù)的語(yǔ)法格式如下。def函數(shù)名(...,形參名,形參名=默認(rèn)值):代碼塊260三、可變參數(shù)Python的可變參數(shù)有兩種,一種是列表類型,一種是字典類型。如以下示例所示,number接收的是一個(gè)常規(guī)參數(shù),*args接收的是一個(gè)元組,**kwargs接收的是一個(gè)字典。def函數(shù)名(...,number,*args,**kwargs):代碼塊可以理解為,在傳遞參數(shù)的過(guò)程中,傳入的數(shù)據(jù)列表在常規(guī)參數(shù)接收完畢之后,剩下的數(shù)據(jù)列表會(huì)由形參*args封裝成一個(gè)元組進(jìn)行接收,字典數(shù)據(jù)列表則全由**kwargs封裝成字典進(jìn)行接收。261四、關(guān)鍵字參數(shù)一般情況下,使用函數(shù)時(shí)采用的參數(shù)都是位置參數(shù),即傳入函數(shù)的實(shí)際參數(shù)必須與形式參數(shù)的數(shù)量和位置一一對(duì)應(yīng)。而關(guān)鍵字參數(shù)則可以避免位置參數(shù)需要牢記參數(shù)位置的麻煩,使函數(shù)的調(diào)用和參數(shù)傳遞更加靈活、方便。關(guān)鍵字參數(shù)是指使用形式參數(shù)的名稱來(lái)確定輸入的參數(shù)值。通過(guò)此方式指定函數(shù)的實(shí)際參數(shù)時(shí),不再需要實(shí)際參數(shù)與形式參數(shù)的位置完全一致,只要確保實(shí)際參數(shù)的名稱正確即可。因此,函數(shù)的參數(shù)名應(yīng)具有更好的語(yǔ)義,通過(guò)參數(shù)名可以立刻明確傳入函數(shù)的各個(gè)參數(shù)的含義。262五、命名關(guān)鍵字參數(shù)如果需要限制關(guān)鍵字參數(shù)的名稱,可以用命名關(guān)鍵字參數(shù),如以下示例所示,只接收name和age作為關(guān)鍵字參數(shù),并用“*”分隔。defperson(...,*,name,age):代碼塊注意:在傳遞參數(shù)時(shí),務(wù)必按照函數(shù)定義時(shí)所命名的關(guān)鍵字參數(shù)進(jìn)行傳遞,否則在調(diào)用函數(shù)時(shí)會(huì)引發(fā)錯(cuò)誤。如果函數(shù)定義中已經(jīng)存在一個(gè)可變參數(shù)(帶有“*”的參數(shù)),后續(xù)命名關(guān)鍵字參數(shù)時(shí)無(wú)須再添加額外的“*”作為分隔符。而在給命名關(guān)鍵字參數(shù)傳遞值時(shí),必須顯式地使用參數(shù)名來(lái)傳遞值,否則將引發(fā)錯(cuò)誤。這些注意事項(xiàng)對(duì)于確保函數(shù)調(diào)用的正確性非常重要。命名關(guān)鍵字參數(shù)也可以有默認(rèn)值,從而簡(jiǎn)化調(diào)用,示例如下。defperson(*,name,age=20):print(name,age)person(name='小紅')如上所示,由于命名關(guān)鍵字參數(shù)age具有默認(rèn)值,在調(diào)用函數(shù)時(shí)可不傳入age參數(shù)。263任務(wù)4
變量作用域和global變量的使用2641.?熟悉變量作用域的概念。2.?能區(qū)分局部變量與全局變量。3.?能正確使用局部變量和全局變量。任務(wù)目標(biāo)265變量作用域是指變量的有效范圍,即變量可以在哪個(gè)范圍內(nèi)使用。有些變量可以在整段代碼的任意位置使用,有些變量只能在函數(shù)內(nèi)部使用,還有些變量只能在for循環(huán)內(nèi)部使用。變量作用域由變量的定義位置決定,在不同位置定義的變量,它們的作用域是不一樣的。變量按作用域劃分,可以分為局部變量和全局變量?jī)煞N。相關(guān)知識(shí)266267一、局部變量局部變量是指在函數(shù)內(nèi)部定義的變量,它的作用域僅限于函數(shù)內(nèi)部,在函數(shù)外部就不能被使用了。當(dāng)函數(shù)被執(zhí)行時(shí),Python會(huì)為局部變量分配一個(gè)臨時(shí)的存儲(chǔ)空間,所有在函數(shù)內(nèi)部定義的變量都會(huì)存儲(chǔ)在這個(gè)空間中。函數(shù)執(zhí)行完畢,這個(gè)臨時(shí)存儲(chǔ)空間隨即被釋放并回收,該空間中存儲(chǔ)的變量自然也就無(wú)法再被使用。268二、全局變量除了在函數(shù)內(nèi)部定義變量,Python還允許在所有函數(shù)的外部定義變量,這樣的變量稱為全局變量。和局部變量不同,全局變量的默認(rèn)作用域是整個(gè)程序,即全局變量既可以在各個(gè)函數(shù)內(nèi)部使用,又可以在各個(gè)函數(shù)外部使用。269定義全局變量的方式有兩種:一種是在函數(shù)體外定義的變量,這類變量一定是全局變量;另一種是在函數(shù)體內(nèi)定義的全局變量。這里涉及全局變量的用法,即使用global關(guān)鍵字對(duì)變量進(jìn)行修飾后,該變量就變?yōu)槿肿兞?,具體語(yǔ)法格式如下。def函數(shù)名(參數(shù)列表):global變量名注意:在使用global關(guān)鍵字修飾變量名時(shí),不能直接給變量賦初值,否則會(huì)引發(fā)語(yǔ)法錯(cuò)誤。任務(wù)5
Python高階函數(shù)和lambda表達(dá)式的使用2701.?熟悉Python高階函數(shù)的概念。2.?掌握Python中常用高階函數(shù)的使用方法。3.?掌握l(shuí)ambda表達(dá)式的使用方法。4.?能正確使用Python中常用的高階函數(shù)和lambda表達(dá)式。任務(wù)目標(biāo)271一、高階函數(shù)的概念函數(shù)只要滿足下面的任意一個(gè)條件就是高階函數(shù)。(1)將一個(gè)函數(shù)的函數(shù)名作為參數(shù)傳給另一個(gè)函數(shù)。(2)一個(gè)函數(shù)的返回值為另外一個(gè)函數(shù)(若返回為函數(shù)本身,則為遞歸)。相關(guān)知識(shí)272273二、Python內(nèi)置的高階函數(shù)1.?map函數(shù)map函數(shù)接收的是兩個(gè)參數(shù),一個(gè)是函數(shù)名,另一個(gè)是序列,其功能是將序列中的數(shù)值作為函數(shù)的參數(shù)依次傳入函數(shù)中執(zhí)行,然后再返回到列表中。返回值是一個(gè)迭代器對(duì)象。高階函數(shù)map一般和匿名函數(shù)lambda聯(lián)合使用,能夠起到明顯的簡(jiǎn)化代碼的效果。對(duì)于迭代器有三種訪問(wèn)方式:next函數(shù)、for循環(huán)、轉(zhuǎn)變成列表。2742.?filter函數(shù)?lter函數(shù)也是接收一個(gè)函數(shù)和一個(gè)序列的高階函數(shù),其主要
溫馨提示
- 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025勞動(dòng)合同編寫指南
- 2025投資合作協(xié)議范文合同協(xié)議范文
- 2025中國(guó)大陸出版合同范本
- 2025深圳經(jīng)濟(jì)特區(qū)房屋租賃合同書
- 2025年股票發(fā)行與上市事務(wù)法律服務(wù)合同協(xié)議樣本
- 2025建筑工程合同模板
- 2025合同法制的政策基礎(chǔ)與功能沖突
- 2025養(yǎng)殖產(chǎn)品買賣合同模板
- 2025貸款擔(dān)保的合同范本
- 2025項(xiàng)目管理合同文本
- 特殊減員申請(qǐng)表(職工個(gè)人申請(qǐng)減員)
- 施工現(xiàn)場(chǎng)日周月安全檢查記錄表
- 板材生產(chǎn)線的張力控制和負(fù)荷平衡控制
- 熒光光譜知識(shí)
- 世界各國(guó)鋼材牌號(hào)對(duì)照表
- 金佑人生銷售邏輯
- 計(jì)算機(jī)網(wǎng)絡(luò)基礎(chǔ)-----IP地址
- 工程項(xiàng)目協(xié)同管理研究
- 最全的聚酯成型網(wǎng)系列型號(hào)規(guī)格技術(shù)參數(shù)
- 應(yīng)急照明裝置的安裝工藝
- 某糧食倉(cāng)庫(kù)屋面預(yù)應(yīng)力拱板制作分項(xiàng)施工方案(附圖)
評(píng)論
0/150
提交評(píng)論