什麼是函數
函數是對程序邏輯進行結構化或過程化的一種編程方法。能將整塊代碼巧妙地隔離成易於管理的小塊,把重複的代碼放在函數中而不是進行大量的copy。前面使用過很多print()來進行列印,這是python提供的內建函數,你也可以自己創建函數,這叫做用戶自定義函數。
創建函數
你可以定義一個由自己想要功能的函數,用def語句來創建,標題行由def關鍵字,函數的名字,以及參數的集合(如果有的話)組成。def子句的剩餘部分包括了一個雖然可選但是強烈推薦的文檔字字符串和必須的函數體。return結束函數可以選擇返回一個值,不帶return的函數相當於返回一個None。前面我們已經看到過很多函數的聲明,這又是一個。
下面簡單定義一個函數,並調用它
參數
Python函數的形參集合由在調用時要傳入函數的所有參數組成,這些參數包括了必要參數、關鍵字參數和所有含有默認值,函數調用時不必要指定的參數。
位置參數:必須要以正確的順序傳入函數。沒有任何默認參數的話,傳入函數的參數的數目必須和聲明時一致。
默認參數:如果在函數調用時沒有為參數提供值則使用預先定義的默認值。
關鍵字參數:關鍵字參數和函數調用關係緊密,函數調用使用關鍵字參數來確定傳入的參數值。使用關鍵字參數允許函數調用時參數的順序與聲明時不一致,因為 Python 解釋器能夠用參數名匹配參數值。
不定長參數:你可能會有需要用函數處理可變量參數的情況。和上述參數不同,聲明時不會命名。用*和**符號來指定元組和字典的元素作為非關鍵字以及關鍵字參數。函數定義的語法為:
下面看一個關鍵字和非關鍵字可變長參數都在一個函數中的例子:
匿名函數
python允許用lambda關鍵字來創造匿名函數。匿名是因為不需要以標準的方式來聲明。lambda函數的語法只包含一個語句,如下:lambda [arg1, [arg2,.....argn]]: expression
變量作用域
標識符的作用域是定義為其聲明在程序裡的可應用範圍,即變量可見性。訪問權限決定於這個變量是在哪裡賦值的。定義在函數內部的變量擁有一個局部作用域,定義在函數外的變量擁有全局作用域。局部變量只能在其被聲明的函數內部訪問,而全局變量可以在整個程序範圍內訪問。