什麼是函數
函數是組織好的,可以重複使用的,用來實現單一或相關聯功能的代碼段,它能夠提高應用的模塊化和代碼的重複利用率。
函數的定義
在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 表達式
formal_args爲形參,args和kwargs爲不定長參數。當調用函數的時候,函數傳入的參數個數優先匹配formal_args參數的個數。如果傳入的參數個數和formal_args參數的個數相同,不定長參數會返回空的元組或字典;如果傳入參數的個數比formal_args參數的個數多,可以分兩種情況:
1、如果傳入的參數沒有指定名稱,那麼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)