Python3 自學第11天:def 函數

Python3 自學第11天:def 函數

前面我們瞭解了Python的流程控制,今天我們開始學習下python中函數function

1 函數的定義

函數是一段實現單一功能的代碼段,可以提高應用的模塊性和代碼的重用率。前面我們已經接觸過一些Python的內置函數,比如:

print(),input(),len(),type(),id()等等

我們可以使用def關鍵字自定義函數 ,格式如下:

def 函數名 (參數列表):
函數體

Python 標識符的命名遵循駝峰命名法,即包含多個單詞時首字母需要大寫,其餘字母小寫;也可以使用下劃線( _ )把每個單詞分開,字母全部小寫;為了提高代碼的可讀性,變量名,函數名,類名等都需要遵守駝峰命名規則。

Python3 自學第11天:def 函數

注意,PEP 8 規範建議函數在定義和調用時,代碼前面需要空兩行。

使用return關鍵字可以返回一個值,也可以同時返回多個值(這個厲害了);返回多個值時會封裝進一個元組tuple裡。函數可以有返回值,也可以沒有返回值;

Python3 自學第11天:def 函數

定義一個空函數,實例代碼:

Python3 自學第11天:def 函數

pass語句一般在函數或者類裡面出現的比較多,如果你的代碼實現暫時沒想好怎麼寫的話,可以用pass來代替,如果你留空的話程序是會報錯的。

2 函數傳參,參數可以是各種對象,參數的類型大概分為這幾種:

必需參數:函數調用時參數的順序和數量必須和聲明時的一致,否則是會報錯的。

關鍵字參數:函數調用時參數的順序與聲明時可以不一致,因為 Python 解釋器能夠用參數名匹配參數值。

默認參數:調用函數時如果沒有傳遞參數,則會使用默認參數,默認參數必須放在最後面,否則會報

動態參數:當需要傳遞更多的參數時有兩種方式,一種是*一個星參數,表示參數是以元組形式傳遞進來 ,另外一種是 **兩個星參數,表示參數是以字典形式傳遞進來;

實例代碼:

Python3 自學第11天:def 函數

Python3 自學第11天:def 函數

Python3 自學第11天:def 函數

Python3 自學第11天:def 函數

3 匿名函數,Python使用lambda表達式來創建匿名函數,形式如下:

lambda 參數列表:表達式
Python3 自學第11天:def 函數

Python3 自學第11天:def 函數

4 變量作用域 LEGB

L (Local) 局部作用域

E (Enclosing) 閉包函數外的函數中

G (Global) 全局作用域

B (Built - in) 內置作用域(內置函數所在模塊的範圍)

變量作用域查找規則:L –> E –> G –>B

即在局部找不到,便會去局部外的局部找(例如閉包),再找不到就會去全局找,再者去內置中找。實例如下:

Python3 自學第11天:def 函數

在函數嵌套中內層函數func_inner() 就是一個閉包函數。

5 全局變量和局部變量:

定義在函數內部的變量擁有一個局部作用域,定義在函數外的擁有全局作用域。

局部變量只能在其被聲明的函數內部訪問,而全局變量可以在整個程序範圍內訪問。

調用函數時,所有在函數內聲明的變量名稱都將被加入到作用域中。

Python3 自學第11天:def 函數

當內部作用域想修改外部作用域的變量時,可以用global和nonlocal關鍵字,實例代碼:

Python3 自學第11天:def 函數

如果要修改嵌套作用域(enclosing 作用域,外層非全局作用域)中的變量則需要 nonlocal 關鍵字

Python3 自學第11天:def 函數

上一篇:Python3 自學第10天:流程控制

下一篇:Python3 自學第12天:模塊與包管理,Python解釋器

【極客乾貨】從事IT行業十餘年,在移動互聯網開發,J2EE企業級開發,IOT物聯網,AI人工智能等方面有點技術積累,熟練使用C/C++,Java,Python等編程語言。從2009年開始接觸Python,後續借空閒時間將個人熟悉的技術乾貨系統性分享給大家,也許我的分享會讓你少走一些彎路,如果您覺得還可以,請多多關注,評論和轉發,非常感謝!

相關推薦

推薦中...