前面我們瞭解了Python的流程控制,今天我們開始學習下python中函數function;
1 函數的定義
函數是一段實現單一功能的代碼段,可以提高應用的模塊性和代碼的重用率。前面我們已經接觸過一些Python的內置函數,比如:
print(),input(),len(),type(),id()等等
我們可以使用def關鍵字自定義函數 ,格式如下:
def 函數名 (參數列表):
函數體
Python 標識符的命名遵循駝峰命名法,即包含多個單詞時首字母需要大寫,其餘字母小寫;也可以使用下劃線( _ )把每個單詞分開,字母全部小寫;為了提高代碼的可讀性,變量名,函數名,類名等都需要遵守駝峰命名規則。
注意,PEP 8 規範建議函數在定義和調用時,代碼前面需要空兩行。
使用return關鍵字可以返回一個值,也可以同時返回多個值(這個厲害了);返回多個值時會封裝進一個元組tuple裡。函數可以有返回值,也可以沒有返回值;
定義一個空函數,實例代碼:
pass語句一般在函數或者類裡面出現的比較多,如果你的代碼實現暫時沒想好怎麼寫的話,可以用pass來代替,如果你留空的話程序是會報錯的。
2 函數傳參,參數可以是各種對象,參數的類型大概分為這幾種:
必需參數:函數調用時參數的順序和數量必須和聲明時的一致,否則是會報錯的。
關鍵字參數:函數調用時參數的順序與聲明時可以不一致,因為 Python 解釋器能夠用參數名匹配參數值。
默認參數:調用函數時如果沒有傳遞參數,則會使用默認參數,默認參數必須放在最後面,否則會報
動態參數:當需要傳遞更多的參數時有兩種方式,一種是*一個星參數,表示參數是以元組形式傳遞進來 ,另外一種是 **兩個星參數,表示參數是以字典形式傳遞進來;
實例代碼:
3 匿名函數,Python使用lambda表達式來創建匿名函數,形式如下:
lambda 參數列表:表達式
4 變量作用域 LEGB
L (Local) 局部作用域
E (Enclosing) 閉包函數外的函數中
G (Global) 全局作用域
B (Built - in) 內置作用域(內置函數所在模塊的範圍)
變量作用域查找規則:L –> E –> G –>B
即在局部找不到,便會去局部外的局部找(例如閉包),再找不到就會去全局找,再者去內置中找。實例如下:
在函數嵌套中內層函數func_inner() 就是一個閉包函數。
5 全局變量和局部變量:
定義在函數內部的變量擁有一個局部作用域,定義在函數外的擁有全局作用域。
局部變量只能在其被聲明的函數內部訪問,而全局變量可以在整個程序範圍內訪問。
調用函數時,所有在函數內聲明的變量名稱都將被加入到作用域中。
當內部作用域想修改外部作用域的變量時,可以用global和nonlocal關鍵字,實例代碼:
如果要修改嵌套作用域(enclosing 作用域,外層非全局作用域)中的變量則需要 nonlocal 關鍵字:
下一篇:Python3 自學第12天:模塊與包管理,Python解釋器
【極客乾貨】從事IT行業十餘年,在移動互聯網開發,J2EE企業級開發,IOT物聯網,AI人工智能等方面有點技術積累,熟練使用C/C++,Java,Python等編程語言。從2009年開始接觸Python,後續借空閒時間將個人熟悉的技術乾貨系統性分享給大家,也許我的分享會讓你少走一些彎路,如果您覺得還可以,請多多關注,評論和轉發,非常感謝!