python之函式
什麼是函式
函式是組織好的,可以重複使用的,用來實現單一或相關聯功能的程式碼段,它能夠提高應用的模組化和程式碼的重複利用率。
函式的定義
在Python中可以使用def關鍵字來定義函式,和變數一樣每個函式也有一個響亮的名字,而且命名規則跟變數的命名規則是一致的。在函式名後面的圓括號中可以放置傳遞給函式的引數,這一點和數學上的函式非常相似,程式中函式的引數就相當於是數學上說的函式的自變數,而函式執行完成後我們可以通過return關鍵字來返回一個值,這相當於數學上說的函式的因變數。格式如下:
def 函式名(引數類別): 函式體 return 表示式
舉個簡單的例子,定義個列印資訊的函式。如下:
def print_info(): print('--------------------------------------- ') print('生命苦短,我用python') print('--------------------------------------- ')
函式的呼叫
定義了函式之後,就相當於有了一段具有特定功能的程式碼,要想讓這些程式碼能夠執行,需要呼叫函式。呼叫函式的方式很簡單,通過“函式名()”來呼叫。
函式的引數
定義函式的時候,我們把引數的名字和位置確定下來,函式的介面定義就完成了。對於函式的呼叫者來說,只需要知道如何傳遞正確的引數,以及函式將返回什麼樣的值就夠了,函式內部的複雜邏輯被封裝起來,呼叫者無需瞭解Python的函式定義非常簡單,但靈活度卻非常大。除了正常定義的必選引數外,還可以使用預設引數、可變引數和關鍵字引數,使得函式定義出來的介面,不但能處理複雜的引數,還可以簡化呼叫者的程式碼。以下舉個簡單的例子:
def power(x): return x*x
定義函式時,可以給函式的引數設定預設值,這個引數就被稱為預設引數。如果預設引數沒有傳入值,則直接使用預設的值。例如:
def print_info(name,age=35): print("Name:",name) print("age",age) print print_info("zhangsan") print print_info("zhangsan",age=40)
不定長引數
通常在定義一個函式時,諾希望函式能夠處理的引數個數比當初定義的引數個數多,此時可以在函式中使用不定長引數。
def 函式名 ([formal_args,] *args,**kwargs): 函式體 return 表示式
kwargs為不定長引數。當呼叫函式的時候,函式傳入的引數個數優先匹配formal_args引數的個數。如果傳入的引數個數和formal_args引數的個數相同,不定長引數會返回空的元組或字典;如果傳入引數的個數比formal_args引數的個數多,可以分兩種情況:
args會以元組的形式存放這些多餘的引數2、如果傳入的引數指定了名稱,如m=1,那麼**kwargs會以字典的形式存放這些被命名的引數。
例如:
def test(a,b,*args): print(a) print(b) print(args) test(11,22)
遞迴函式
在函式內部,可以呼叫其他函式。如果一個函式在內部呼叫自身本身,這個函式就是遞迴函式。
舉個例子,我們來計算階乘n! = 1 x 2 x 3 x ... x n
,用函式fact(n)表示,可以看出:
fact(n) = n! = 1 x 2 x 3 x ... x (n-1) x n = (n-1)! x n = fact(n-1) x n
def fact(n): if n==1: return 1 return n*fact(n-1)