前面我們了解了Python的流程控制,今天我們開始學(xué)習(xí)下python中函數(shù)function;
1 函數(shù)的定義
函數(shù)是一段實(shí)現(xiàn)單一功能的代碼段,可以提高應(yīng)用的模塊性和代碼的重用率。前面我們已經(jīng)接觸過一些Python的內(nèi)置函數(shù),比如:
print(),input(),len(),type(),id()等等
我們可以使用def關(guān)鍵字自定義函數(shù) ,格式如下:
def 函數(shù)名 (參數(shù)列表):
函數(shù)體
Python 標(biāo)識(shí)符的命名遵循駝峰命名法,即包含多個(gè)單詞時(shí)首字母需要大寫,其余字母小寫;也可以使用下劃線( _ )把每個(gè)單詞分開,字母全部小寫;為了提高代碼的可讀性,變量名,函數(shù)名,類名等都需要遵守駝峰命名規(guī)則。
注意,PEP 8 規(guī)范建議函數(shù)在定義和調(diào)用時(shí),代碼前面需要空兩行。
使用return關(guān)鍵字可以返回一個(gè)值,也可以同時(shí)返回多個(gè)值(這個(gè)厲害了);返回多個(gè)值時(shí)會(huì)封裝進(jìn)一個(gè)元組tuple里。函數(shù)可以有返回值,也可以沒有返回值;
定義一個(gè)空函數(shù),實(shí)例代碼:
pass語句一般在函數(shù)或者類里面出現(xiàn)的比較多,如果你的代碼實(shí)現(xiàn)暫時(shí)沒想好怎么寫的話,可以用pass來代替,如果你留空的話程序是會(huì)報(bào)錯(cuò)的。
2 函數(shù)傳參,參數(shù)可以是各種對象,參數(shù)的類型大概分為這幾種:
必需參數(shù):函數(shù)調(diào)用時(shí)參數(shù)的順利和數(shù)量必須和聲明時(shí)的一致,否則是會(huì)報(bào)錯(cuò)的。
關(guān)鍵字參數(shù):函數(shù)調(diào)用時(shí)參數(shù)的順序與聲明時(shí)可以不一致,因?yàn)?Python 解釋器能夠用參數(shù)名匹配參數(shù)值。
默認(rèn)參數(shù):調(diào)用函數(shù)時(shí)如果沒有傳遞參數(shù),則會(huì)使用默認(rèn)參數(shù),默認(rèn)參數(shù)必須放在最后面,否則會(huì)報(bào)
動(dòng)態(tài)參數(shù):當(dāng)需要傳遞更多的參數(shù)時(shí)有兩種方式,一種是*一個(gè)星參數(shù),表示參數(shù)是以元組形式傳遞進(jìn)來 ,另外一種是 **兩個(gè)星參數(shù),表示參數(shù)是以字典形式傳遞進(jìn)來;
實(shí)例代碼:
3 匿名函數(shù),Python使用lambda表達(dá)式來創(chuàng)建匿名函數(shù),形式如下:
lambda 參數(shù)列表:表達(dá)式
4 變量作用域 LEGB
L (Local) 局部作用域
E (Enclosing) 閉包函數(shù)外的函數(shù)中
G (Global) 全局作用域
B (Built - in) 內(nèi)置作用域(內(nèi)置函數(shù)所在模塊的范圍)
變量作用域查找規(guī)則:L –> E –> G –>B
即在局部找不到,便會(huì)去局部外的局部找(例如閉包),再找不到就會(huì)去全局找,再者去內(nèi)置中找。實(shí)例如下:
在函數(shù)嵌套中內(nèi)層函數(shù)func_inner() 就是一個(gè)閉包函數(shù)。
5 全局變量和局部變量:
定義在函數(shù)內(nèi)部的變量擁有一個(gè)局部作用域,定義在函數(shù)外的擁有全局作用域。
局部變量只能在其被聲明的函數(shù)內(nèi)部訪問,而全局變量可以在整個(gè)程序范圍內(nèi)訪問。
調(diào)用函數(shù)時(shí),所有在函數(shù)內(nèi)聲明的變量名稱都將被加入到作用域中。
當(dāng)內(nèi)部作用域想修改外部作用域的變量時(shí),可以用global和nonlocal關(guān)鍵字,實(shí)例代碼:
如果要修改嵌套作用域(enclosing 作用域,外層非全局作用域)中的變量則需要 nonlocal 關(guān)鍵字:
聯(lián)系客服