版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第七章 函 數(shù)函數(shù)能夠提高應(yīng)用的模塊性和代碼的重復(fù)利用率。Python提供了許多內(nèi)建函數(shù),開發(fā)者也可以自己創(chuàng)建函數(shù)。Python快樂學(xué)習(xí)班的同學(xué)結(jié)束旋轉(zhuǎn)樂園的游玩后,導(dǎo)游帶領(lǐng)他們來到函數(shù)樂高積木廳,在函數(shù)樂高積木廳,同學(xué)們只要通過想象和創(chuàng)意,就可以使用手中的代碼塊拼湊出很多神奇的函數(shù),它們有不帶參數(shù)的,有帶必須參數(shù)的,有帶關(guān)鍵字參數(shù)的,有帶默認參數(shù)的,有帶可變參數(shù)的,有帶組合參數(shù)的。現(xiàn)在陪同Python快樂學(xué)習(xí)班的同學(xué)一起進入函數(shù)樂高積木廳,開始我們的創(chuàng)意學(xué)習(xí)之行。7.1 函數(shù)的定義函數(shù)這個概念在前面的章節(jié)中已經(jīng)提到過很多次,也已經(jīng)使用過函數(shù)。不過到目前為止,我們用的都是Python內(nèi)置函數(shù)。
2、這些Python內(nèi)置函數(shù)的定義部分對我們來說是透明的。因此,我們只需關(guān)注這些函數(shù)的用法,而不必關(guān)心函數(shù)是如何定義的。Python支持自定義函數(shù),即由我們自己定義一個實現(xiàn)某個功能的函數(shù)。下面是自定義函數(shù)的簡(1)函數(shù)代碼塊以def關(guān)鍵字開頭,后接函數(shù)標識符名稱和圓括號“()”。(2)所有傳入的參數(shù)和自變量都必須放在圓括號中,可以在圓括號中定義參數(shù)。(3)函數(shù)的第一行語句可以選擇性地使用文檔字符串,用于存放函數(shù)說明。(4)函數(shù)內(nèi)容以冒號開始,并且要縮進。(5)return 表達式 用于結(jié)束函數(shù),選擇性地返回一個值給調(diào)用方。不帶表達式的return相當于返回 None。單規(guī)則。Python定義函數(shù)使
3、用def關(guān)鍵字,一般格式如下:def 函數(shù)名(參數(shù)列表): 函數(shù)體或者更直觀的表示為:def (arg1, arg2,. argN):函數(shù)的名字必須以字母開頭,可以包括下畫線“_”。和定義變量一樣,不能把Python的關(guān)鍵字定義成函數(shù)的名字。函數(shù)內(nèi)的語句數(shù)量是任意的,每個語句至少有一個空格的縮進,以表示該語句屬于這個函數(shù)。函數(shù)體必須保持縮進一致,因為在函數(shù)中,縮進結(jié)束就表示函數(shù)結(jié)束。7.2 函數(shù)的調(diào)用在程序設(shè)計中,函數(shù)是指用于進行某種計算的一系列語句的有名稱的組合。定義一個函數(shù)時,需要指定函數(shù)的名稱并寫下一系列程序語句。之后就可以使用名稱來“調(diào)用”這個函數(shù)。前面我們已經(jīng)見過函數(shù)調(diào)用的例子,如下
4、示例: print(hello world)hello world type(hello) int(12.1)12Python3內(nèi)置了很多有用的函數(shù),我們可以直接調(diào)用。要調(diào)用一個函數(shù),需要知道函數(shù)的名稱和參數(shù),比如求絕對值的函數(shù)abs,只有一個參數(shù)。可以直接從Python的官方網(wǎng)站查看文檔:https:/3/library/functions.html除了到Python官網(wǎng)查看文檔,還可以在交互式命令行通過help(abs)查看abs函數(shù)的幫助信息。在交互模式下輸入: help(abs)Help on built-in function abs in module builtins:abs(x
5、, /) Return the absolute value of the argument.調(diào)用Python的函數(shù),需要根據(jù)函數(shù)定義,傳入正確的參數(shù)。函數(shù)定義時需要注意幾點:(1)如果沒有return語句,函數(shù)執(zhí)行完畢后也會返回結(jié)果,只是結(jié)果為None。(2)return None可以簡寫為return。(3)在Python中定義函數(shù)時,需要保持函數(shù)體中同一層級代碼的縮進一致。在一個函數(shù)中可以定義多條語句,并且在函數(shù)中能做各種賦值、運算、調(diào)用其他函數(shù)等操作,并返回結(jié)果。如可以定義輸出多條語句的函數(shù)并執(zhí)行(print_more.py):def print_more(): print(該函數(shù)可以
6、輸出多條語句,我是第一條。) print(我是第二條) print(我是第三條)print_more() #調(diào)用函數(shù)程序輸出結(jié)果如下:該函數(shù)可以輸出多條語句,我是第一條。我是第二條我是第三條在Python中,可以定義一個什么都不做的函數(shù)。如果想定義一個什么都不做的空函數(shù),可以用pass語句,定義如下函數(shù)并執(zhí)行(do_nothing.py):def do_nothing(): passdo_nothing()pass語句什么都不做,這樣有什么用呢?此處pass可以作為占位符使用,比如現(xiàn)在還沒想好怎么寫函數(shù)的代碼,可以先放一個pass,讓代碼能運行起來。函數(shù)的目的是把一些復(fù)雜操作隱藏起來,用于簡化
7、程序的結(jié)構(gòu),使程序更容易閱讀。函數(shù)在調(diào)用前必須先定義。7.3 函數(shù)的參數(shù)我們在7.1節(jié)中講述了如何定義函數(shù),但講述的是定義簡單的函數(shù),還有一類函數(shù)是帶有參數(shù)的,稱為帶參數(shù)的函數(shù)。本節(jié)將探討如何定義帶參的函數(shù)及其使用。調(diào)用函數(shù)時可以使用以下參數(shù)類型:(1)必須參數(shù)。(2)關(guān)鍵字參數(shù)。(3)默認參數(shù)。(4)可變參數(shù)。(5)組合參數(shù)。7.3.1 必須參數(shù)必須參數(shù)須以正確的順序傳入函數(shù)。調(diào)用時的數(shù)量必須和聲明時的一樣。def param_one(str): print(the param is:,str) print(我是一個傳入?yún)?shù),我的值是:,str)Param_one(hello,world)代
8、碼中定義了一個必須傳入一個參數(shù)的函數(shù)param_one(str),其傳入?yún)?shù)為str,結(jié)果即是將hello,world這個值傳給str。對于上面的示例,假如不傳入?yún)?shù)或傳入一個以上的參數(shù),結(jié)果會怎樣呢?操作如下:param_one() #不傳入?yún)?shù)程序輸出結(jié)果如下:Traceback(most recent call last): File param_one.py, line 7, in param_one() #不傳入?yún)?shù)TypeError: param_one() missing 1 required positional argument: val_str由輸出結(jié)果可以看到,程序報錯:
9、函數(shù)缺少一個必須的定位參數(shù),參數(shù)為val_str。在實際項目應(yīng)用中,若定義函數(shù)時需要定義的參數(shù)個數(shù)較少,建議定義成必須參數(shù)形式的函數(shù)。7.3.2 關(guān)鍵字參數(shù)函數(shù)調(diào)用使用關(guān)鍵字參數(shù)來確定傳入的參數(shù)值。使用關(guān)鍵字參數(shù)Python 解釋器能夠用參數(shù)名匹配參數(shù)值。def person_info(age, name): print(f年齡:age) print(f名稱:name) returnprint(-按參數(shù)順序傳入?yún)?shù)-)person_info(21,小萌)print(-不按參數(shù)順序傳入?yún)?shù),指定參數(shù)名-)person_info(name=小萌,age=21)print(-按參數(shù)順序傳入?yún)?shù),并指
10、定參數(shù)名-)person_info(age=21,name=小萌)調(diào)用函數(shù),輸出結(jié)果如下:-按參數(shù)順序傳入?yún)?shù)-年齡: 21名稱: 小萌-不按參數(shù)順序傳入?yún)?shù),指定參數(shù)名-年齡: 21名稱: 小萌-按參數(shù)順序傳入?yún)?shù),并指定參數(shù)名-年齡: 21名稱: 小萌在實際項目應(yīng)用中,使用關(guān)鍵字參數(shù)的形式調(diào)用函數(shù)是不錯的做法。7.3.3 默認參數(shù)調(diào)用函數(shù)時,如果沒有傳遞參數(shù),則會使用默認參數(shù)。所謂使用默認參數(shù),就是我們在定義函數(shù)時,給參數(shù)一個默認值,當沒有給調(diào)用該函數(shù)時的該參數(shù)賦值時,調(diào)用的函數(shù)就使用這個默認的值。定義如下函數(shù)并執(zhí)行(default_param.py):def default_param(
11、name,age=23): print(hi,我叫:,name) print(我今年:,age) returndefault_param(小萌)調(diào)用函數(shù),輸出結(jié)果如下:hi,我叫:小萌我今年:23在一個函數(shù)定義中,是否可以定義多個默認參數(shù)?先看看以下幾個函數(shù)定義的示例。(1)示例1:多個默認參數(shù)值(default_param_test.py)(2)示例2:默認參數(shù)在必須參數(shù)前(default_param_try.py)由示例1和示例2,得到如下結(jié)論。對于默認參數(shù):(1)不管有多少個默認參數(shù),默認參數(shù)都不能在必須參數(shù)之前。(2)不管有多少個默認參數(shù),若不傳入默認參數(shù)值,都會使用默認值。(3)若要
12、更改某一個默認參數(shù)的值,而不想傳入其他默認參數(shù),且其位置不是第一個默認參數(shù),可以通過參數(shù)名來更改想要更改的默認參數(shù)的值。(4)若有一個默認參數(shù)是通過傳入?yún)?shù)名更改參數(shù)值,則其他任何想要更改的默認參數(shù)都需要傳入?yún)?shù)名來更改參數(shù)值,否則報錯。(5)更改默認參數(shù)的值時,傳入默認參數(shù)的順序不需要根據(jù)定義的函數(shù)中的默認參數(shù)的順序進行傳入,不過最好同時傳入?yún)?shù)名,否則容易出現(xiàn)執(zhí)行結(jié)果與預(yù)期不一致的情況。7.3.4 可變參數(shù)可變參數(shù)的基本語法如下:def functionname(formal_args, *var_args_tuple ): 函數(shù)_文檔字符串 function_suite return e
13、xpression加了星號(*)的變量名會存放所有未命名的變量參數(shù)。如果變量參數(shù)在函數(shù)調(diào)用時沒有指定參數(shù),它就是一個空元組。我們也可以不向可變函數(shù)傳遞未命名的變量。如果需要一個函數(shù)能處理比當初聲明時更多的參數(shù),這些參數(shù)叫做可變參數(shù),和前面所述兩種參數(shù)不同,可變函數(shù)聲明時不會命名。通過實例來說明可變函數(shù)的使用,定義如下函數(shù)并執(zhí)行(person_info_var.py): def person_info_var(arg,*vartuple): print(arg) for var in vartuple: print(f我屬于不定長參數(shù)部分:var) returnprint(-不帶可變參數(shù)-)pe
14、rson_info_var(小萌)print(-帶兩個可變參數(shù)-)person_info_var(小萌, 21, beijing)print(-帶5個可變參數(shù)-)person_info_var(小萌, 21, beijing, 123, shanghai, happy)執(zhí)行以上代碼段,由輸出結(jié)果可以看到,雖然在定義函數(shù)時只定義了兩個參數(shù),但調(diào)用時卻可以傳入多個參數(shù),這和之前函數(shù)的調(diào)用不一樣了,這是怎么實現(xiàn)的?這就是可變參數(shù)的好處,在函數(shù)內(nèi)部,若在參數(shù)前加一個星號,在函數(shù)調(diào)用時,會將所有參數(shù)放在一個元組中,通過這種方式將這些值收集起來,然后供函數(shù)內(nèi)部使用。如在函數(shù)person_info_var(
15、)中,參數(shù)vartuple接收的是一個元組,調(diào)用函數(shù)時可以傳入任意個數(shù)的參數(shù),也可以不傳。在這個示例中使用了前面所學(xué)的for循環(huán),通過for循環(huán)遍歷元組。通過這種方式定義函數(shù),調(diào)用時是不是非常方便?我們在后續(xù)學(xué)習(xí)中會經(jīng)常遇到。7.3.5 組合參數(shù)在Python中定義函數(shù),可以用必須參數(shù)、關(guān)鍵字參數(shù)、默認參數(shù)和可變關(guān)鍵字參數(shù),這4種參數(shù)都可以組合使用。但是請注意,參數(shù)定義的順序必須是:必須參數(shù)、默認參數(shù)、可變參數(shù)和關(guān)鍵字參數(shù)。下面我們來介紹組合參數(shù)的使用,請看如下函數(shù)定義:def exp(p1, p2, df=0, *vart, *kw): print(p1 =, p1, p2=, p2, df
16、=, df, vart=, vart, kw =, kw)exp(1,2)exp(1,2,c=3)exp(1,2,3,a,b)exp(1,2,3,abc,x=9)執(zhí)行以上py文件,由輸出結(jié)果可以看到,在定義exp()函數(shù)時,使用了組合參數(shù)的定義形式,Python解釋器會自動按照參數(shù)位置和參數(shù)名把對應(yīng)的參數(shù)傳進去。對exp()函數(shù),還可傳入tuple和dict類型的參數(shù),方式如下:args=(1, 2, 3, 4) #args定義為tuplekw=x: 8, y: 9 #kw定義為dictexp(*args, *kw)執(zhí)行py文件,輸出結(jié)果如下:p1=1,p2=2,df=3,vart=(4,),
17、kw=y: 9, x: 8由輸出結(jié)果可以看到,任意函數(shù)都可以通過類似func(*args,*kw)的形式進行調(diào)用,無論參數(shù)是如何定義的。7.4 形參和實參前面已經(jīng)講述過函數(shù)的參數(shù),本節(jié)將給大家介紹Python函數(shù)的兩種類型參數(shù),一種是函數(shù)定義里的形參,一種是調(diào)用函數(shù)時傳入的實參。經(jīng)常在使用一些內(nèi)置函數(shù)的時候,我們需要傳入?yún)?shù),比如:調(diào)用math.sin時,需要傳入一個整型數(shù)字作為實參,還有的函數(shù)需要多個參數(shù),像math.pow就需要2個參數(shù),一個是基數(shù)(base)和指數(shù)(exponent)。在函數(shù)內(nèi)部,會將實參的值賦給形參,例如(basic_info.py):def basic_info(ag
18、e,name): print(f年齡:age) print(f名稱:name) return在basic_info()函數(shù)中,函數(shù)名basic_info后面的參數(shù)列表age和name就是實參,在函數(shù)體中分別將age和name的值傳遞給age和name,函數(shù)體中的age和name就是形參。在Python中,操作參數(shù)時,在函數(shù)體內(nèi)的操作都是對形參的操作,不能操作實參,即在函數(shù)體中對參數(shù)的更改,是對形參的更改。內(nèi)置函數(shù)的組合規(guī)則在自定義函數(shù)上同樣適用。作為實參傳入函數(shù)的變量名稱和函數(shù)內(nèi)部定義的形參的名稱沒有關(guān)系。函數(shù)的內(nèi)部只關(guān)心形參的值,而不關(guān)心它在調(diào)用前叫什么名字。7.5 變量作用域作用域簡單說就
19、是一個變量的命名空間。在Python中,程序的變量并不是在哪個位置都可以訪問的,訪問權(quán)限決定于這個變量是在哪里賦值的,代碼中變量被賦值的位置,就決定了哪些范圍的對象可以訪問這個變量,這個范圍就是命名空間。變量的作用域決定了哪一部分程序可以訪問哪個特定的變量名稱。在Python中有兩種最基本的變量作用域:(1)局部變量。(2)全局變量。7.5.1 局部變量的定義與使用在函數(shù)內(nèi)定義的變量名,只能被函數(shù)內(nèi)部引用,不能在函數(shù)外引用這個變量名,這個變量的作用域就是局部的,也叫它為局部變量。變量如果在函數(shù)中是第一次出現(xiàn),就稱為局部變量,例如(local_var.py):def local_var(): x
20、=100 print(x)在local_var()函數(shù)中,x是在函數(shù)體中被定義的,并且是第一次出現(xiàn),所以x就稱為局部變量。局部變量只能在函數(shù)體中被訪問,超出函數(shù)體的范圍訪問就會報錯。示例如下(local_func.py):def local_func(): x=100 print(f變量x:x)print(f函數(shù)體外訪問變量x:x)local_func()函數(shù)輸出結(jié)果如下:Traceback(most recent call last): File D:/python/workspace/functiondef.py, line 7, in print(函數(shù)體外訪問變量x:%s %(x)Nam
21、eError: name x is not defined報錯提示:第7行的x沒有定義;由輸入代碼可知,第7行語句沒有在函數(shù)體中,因而執(zhí)行時報錯了。定義如下函數(shù)并執(zhí)行(func_var.py):def func_var(x): print(f局部變量x為:x)func_var(10)函數(shù)輸出結(jié)果如下:局部變量x為:10在Python中,參數(shù)的工作原理類似于局部變量,實參一旦進入函數(shù)體,就成為局部變量了。7.5.2 全局變量的定義與使用在函數(shù)外,一段代碼最始開所賦值的變量,它可以被多個函數(shù)引用,這就是全局變量。全局變量可以在整個程序范圍內(nèi)訪問??匆粋€全局變量的示例(global_var.py):
22、total_val=0 #這是一個全局變量def sum_num(arg1, arg2): total_val=arg1 + arg2 #total_val在這里是局部變量. print(f函數(shù)內(nèi)是局部變量:total_val) return total_valdef total_print(): print(ftotal的值是:total_val) return total_valprint(f函數(shù)求和結(jié)果:sum_num(10, 20)total_print()print(f函數(shù)外是全局變量:total_val)程序輸出結(jié)果如下:函數(shù)內(nèi)是局部變量:30函數(shù)求和結(jié)果:30total的值是:0
23、函數(shù)外是全局變量:0全局變量可在全局使用,并且在某個函數(shù)體中更改全局變量的值,并不會影響全局變量在其他函數(shù)或語句中的值。再看一個函數(shù)定義并執(zhí)行的示例(func_global.py):num=100def func_global(): num=200 print(f函數(shù)體中num的值為:num)func_global()print(f函數(shù)外num的值為:num,)函數(shù)輸出結(jié)果為:函數(shù)體中num的值為:200函數(shù)外num的值為:100雖然在文件中定義了一個名為num的全局變量,在函數(shù)func_global()的函數(shù)體中也定義了一個名為num的變量,但在函數(shù)體中使用的是函數(shù)體中的num變量,在函數(shù)體
24、外使用num變量時使用的是全局變量的值。在函數(shù)中使用某個變量的變量值時,如果該變量對應(yīng)的變量名既被定義為全局變量,又被定義為局部變量,就默認使用局部變量的變量值。所以若要將全局變量變?yōu)榫植孔兞浚恍柙诤瘮?shù)體中定義一個和局部變量名稱一樣的變量即可。若要將函數(shù)中某個變量定義為全局變量,在需要被定義的變量前加一個關(guān)鍵字global即可(如func_glo_1.py示例)。在函數(shù)體中定義global變量后,在函數(shù)體中對變量做的其他操作也是全局性的(如func_glo_2.py)。7.6 函數(shù)的返回值若定義函數(shù)時沒有使用return語句,會默認返回一個None,要返回一個None,可以只寫一個retur
25、n,但要返回具體的數(shù)值,就需要使用return后面加上需要返回的內(nèi)容。所以對于函數(shù)定義來說,使用return語句可以向外提供該函數(shù)執(zhí)行的一些結(jié)果。而對于函數(shù)的調(diào)用者來說,是否可以使用函數(shù)中執(zhí)行的一些操作結(jié)果,就在于函數(shù)是否使用了return語句返回了對應(yīng)的執(zhí)行結(jié)果。在Python中,有一部分函數(shù)會產(chǎn)生結(jié)果,如數(shù)學(xué)函數(shù),我們一般稱這種函數(shù)為有返回值函數(shù)(fruitful function);對于另一些函數(shù),會執(zhí)行一些動作,但不返回任何值,我們稱這類函數(shù)為無返回值函數(shù)。當調(diào)用有返回值函數(shù)時,可以使用返回的結(jié)果做相關(guān)操作,而使用無返回值或返回None的函數(shù)時,就只能得到一個None值。7.7 返回函
26、數(shù)函數(shù)可以有返回值,但除了返回值,函數(shù)中是否可以返回函數(shù)?定義如下函數(shù)(calc_sum.py):def calc_sum(*args): ax=0 for n in args: ax=ax + n return ax 定義了一個可變參數(shù)的求和函數(shù),該函數(shù)允許傳入多個參數(shù),最后返回所求得的和。定義函數(shù)如下(sum_late.py):def sum_late(*args): def calc_sum(): ax=0 for n in args: ax=ax + n return ax return calc_sumsum_late()函數(shù)返回了一個之前沒有看過的類型的值函數(shù)。對于此處定義的sum
27、_late()函數(shù),我們沒有返回求和的結(jié)果,而是返回了一個求和函數(shù)。在這個例子中,在函數(shù)sum_late中又定義了函數(shù)calc_sum,并且內(nèi)部函數(shù)calc_sum可以引用外部函數(shù)sum_late的參數(shù)和局部變量。當sum_late返回函數(shù)calc_sum時,相關(guān)參數(shù)和變量都保存在返回的函數(shù)中,稱為閉包(Closure)。在此處提到了閉包(Closure),什么是閉包呢?如果在一個內(nèi)部函數(shù)里對外部函數(shù)(不是在全局作用域)的變量進行引用,內(nèi)部函數(shù)就被認為是閉包。返回閉包時,返回函數(shù)不要引用任何循環(huán)變量或后續(xù)會發(fā)生變化的變量,否則很容易出現(xiàn)意想不到的問題。7.8 遞歸函數(shù)前面剛學(xué)習(xí)了在函數(shù)中返回函
28、數(shù),前面也學(xué)習(xí)了可以在一個函數(shù)中調(diào)用另外一個函數(shù),但函數(shù)是否可以調(diào)用自己呢?答案是可以的,如果一個函數(shù)在內(nèi)部調(diào)用自身,這個函數(shù)就稱作遞歸函數(shù)。遞歸的簡單定義如下:def recurision(): return recursion()遞歸函數(shù)應(yīng)該滿足如下條件:(1)當函數(shù)直接返回值時有基本實例(最小可能性問題)。(2)遞歸實例,包括一個或多個問題最小部分的遞歸調(diào)用。計算階乘n! = 1 x 2 x 3 x . x n,用函數(shù)fact(n)表示,可以看出:fact(n) = n! = 1 x 2 x 3 x . x (n-1) x n = (n-1)! x n = fact(n-1) x nfa
29、ct(n)可以表示為n x fact(n-1),只有n=1時需要特殊處理。fact(n)用遞歸方式定義如下(fact.py):def fact(n): if n=1: return 1 return n * fact(n-1)執(zhí)行以下函數(shù):print(f調(diào)用遞歸函數(shù)執(zhí)行結(jié)果為:fact(5)輸出結(jié)果如下:調(diào)用遞歸函數(shù)執(zhí)行結(jié)果為:120計算fact(5)時可以根據(jù)函數(shù)定義看到計算過程:= fact(5)= 5 * fact(4)= 5 *(4 * fact(3)= 5 *(4 *(3 * fact(2)= 5 *(4 *(3 *(2 * fact(1)= 5 *(4 *(3 *(2 * 1)=
30、5 *(4 *(3 * 2)= 5 *(4 * 6)= 5 * 24= 120理論上,所有遞歸函數(shù)都可以寫成循環(huán)的方式,不過循環(huán)的邏輯不如遞歸清晰。使用遞歸函數(shù)需要注意防止棧溢出。在計算機中,函數(shù)調(diào)用是通過棧(stack)這種數(shù)據(jù)結(jié)構(gòu)實現(xiàn)的。每當進入一個函數(shù)調(diào)用,棧就會加一層棧幀;每當函數(shù)返回,棧就會減一層棧幀。由于棧的大小不是無限的,因此遞歸調(diào)用的次數(shù)過多會導(dǎo)致棧溢出。解決遞歸調(diào)用棧溢出的方法是通過尾遞歸優(yōu)化,事實上,尾遞歸和循環(huán)的效果一樣,把循環(huán)看成一種特殊尾遞歸函數(shù)也可以。尾遞歸是指在函數(shù)返回時調(diào)用函數(shù)本身,并且return語句不能包含表達式。這樣,編譯器或解釋器就可以對尾遞歸進行優(yōu)化,
31、使遞歸本身無論調(diào)用多少次都只占用一個棧幀,從而避免棧溢出的情況。7.9 匿名函數(shù)匿名函數(shù),意即不再使用def語句這樣標準的形式定義一個函數(shù)。Python使用lambda來創(chuàng)建匿名函數(shù)。lambda只是一個表達式,函數(shù)體比def簡單很多。lambda的主體是一個表達式,而不是一個代碼塊。僅僅能在lambda表達式中封裝有限的邏輯進去。lambda函數(shù)擁有自己的命名空間,且不能訪問自有參數(shù)列表之外或全局命名空間里的參數(shù)。lambda 函數(shù)只包含一個語句:lambda arg1 ,arg2,.argn:expression使用def語句求兩個數(shù)之和示例:def func(x,y): return x+y使用lambda表達式求兩個數(shù)之和示例:lambda x,y: x+y一般應(yīng)該在如下情況下多往匿名函數(shù)的方向考慮:(1)程序一次行使用,不需要定義函數(shù)名時,用匿名函數(shù)可以節(jié)省內(nèi)存中變量定義空間。(2)如果想讓程序更加簡潔時,使用匿名函數(shù)可以做到。當然,匿名函數(shù)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年上網(wǎng)課學(xué)習(xí)心得體會(3篇)
- 課題申報參考:教育數(shù)字化轉(zhuǎn)型下高校輔導(dǎo)員數(shù)字素養(yǎng)測評及提升路徑研究
- 2025年度個人商鋪長期租賃合同標的物詳細清單3篇
- 2025年度個人肖像權(quán)授權(quán)使用協(xié)議書個人肖像權(quán)體育賽事推廣授權(quán)3篇
- 二零二五年度出租房屋消防安全設(shè)施改造施工合同4篇
- 二零二五年度假離婚法律風險評估及解決方案合同3篇
- 2025年度無人機租賃合同協(xié)議書8篇
- 2025版木工預(yù)制構(gòu)件生產(chǎn)與安裝合同范本4篇
- 個人合同擔保書(2024年樣本):教育貸款擔保2篇
- 2025年個人挖機租賃合同續(xù)簽協(xié)議4篇
- 2025水利云播五大員考試題庫(含答案)
- 老年髖部骨折患者圍術(shù)期下肢深靜脈血栓基礎(chǔ)預(yù)防專家共識(2024版)解讀
- 中藥飲片驗收培訓(xùn)
- 手術(shù)室??谱o士工作總結(jié)匯報
- DB34T 1831-2013 油菜收獲與秸稈粉碎機械化聯(lián)合作業(yè)技術(shù)規(guī)范
- 創(chuàng)傷處理理論知識考核試題及答案
- (正式版)HG∕T 21633-2024 玻璃鋼管和管件選用規(guī)定
- 抖音認證承諾函
- 高等數(shù)學(xué)(第二版)
- 四合一體系基礎(chǔ)知識培訓(xùn)課件
- ICD-9-CM-3手術(shù)與操作國家臨床版亞目表
評論
0/150
提交評論