python進階第1篇 函數入門
知識內容:
1.函數的作用
2.函數的定義與調用
3.函數的返回值
4.函數的參數
一、函數的作用
1.復用代碼
將可能重復執行的代碼封裝成函數,並在需要執行的地方調用函數,不僅可以實現代碼的復用,還可以保持代碼的一致性,便於日後的維護
2.提高可讀性
使用函數可以提高代碼的可讀性,便於後期的代碼維護,同時也有利於軟件測試的進行
二、函數的定義與調用
1. 函數的定義
(1)函數是指將一組語句的集合通過一個名字(函數名)封裝起來,要想執行這個函數,只需調用其函數名即可
(2)在python中定義函數的語法如下:
1 def 函數名(參數): 2 # 註釋 3函數體
在python中使用def關鍵字定義函數,然後是一個空格和函數名稱,接下來是一對圓括號,在圓括號中是函數的參數,也就是形式參數列表,
多個參數用逗號隔開,圓括號之後是冒號,然後換行,最後是註釋和函數體代碼
(3)定義函數註意:
函數形參不需要聲明變量,也不需要指定函數返回類型;即使函數不需要接受任何參數,也必須保留一對空的圓括號;括號後的冒號不能少;函數體相對於def關鍵字必須保證一個縮進(4個空格1個tab)
(4)函數名:
函數名:函數名是包含字母,數字,下劃線的任意組合,但是不能以數字開頭。雖然函數名可以隨便取名,但是一般盡量定義成可以表示函數功能的,另外建議函數名不要以大寫開頭,一般類名以大寫開頭,函數名命名法則建議使用下劃線連接法
函數名示例: show_result() input_numbers()
2.函數調用
1 返回值=函數名(參數1,參數2) 2 函數名(參數1,參數2)
示例:
1 # __author__ = "wyb" 2 # date: 2018/3/21 3 # 定義一個函數輸出費波納西數列小於1000的項 4 5 6 # 定義函數: 7 def fib(n): 8 a, b = 1, 1 9 while a < n: 10 print(a, end=‘ ‘) 11 a, b = b, a+b 12 print函數定義與函數調用() 13 14 15 # 調用函數 16 fib(1000) 17 18 函數定義於函數調用
三、函數的返回值
1.return的作用
return的作用: 結束一個函數的執行並返回,同時還可可以通過return返回一個任意類型的值
2.return返回的值
return返回的值可以是任何數據類型,字符串、列表、字典、數字、自定義類型等都可以,可以有一個或多個返回值,也可以沒有返回值
函數中沒有return語句或沒有執行到return語句而返回或執行了不帶任何值得return語句,則函數默認返回空值None
示例:
1 # __author__ = "wyb" 2 # date: 2018/3/21 3 # 函數有一個或多個返回值 4 5 6 def f(): 7 a = 1 8 b = 2 9 c = 3 10 print("函數有一個或多個返回值") 11 # return a # 一個返回值 12 return a, b, c # 多個返回值,以元組的方式返回 13 14 15 print(f())函數有一個或多個返回值
1 # __author__ = "wyb" 2 # date: 2018/3/21 3 # return的作用 4 5 6 def f(): 7 print(123434) 8 # return 1 # 結束函數的執行 9 print(23234) 10 11 12 f()return的作用
四、函數的參數
1.實參和形參
(1)形參: 函數定義時圓括號內是使用逗號分開的形參列表,即函數定義的圓括號中的為形參,只有在被調用時才分配內存單元,在調用結束時,即刻釋放所分配的內存單元。因此,形參只在函數內部有效。函數調用結束返回主調用函數後則不能再使用該形參
(2)實參: 函數調用時圓括號內是使用逗號分開的實參列表,即函數調用的圓括號中的為實參,實參可以是常量、變量、表達式、函數等,無論實參是何種類型的量,在進行函數調用時,它們都必須有確定的值,以便把這些值傳送給形參。因此應預先用賦值,輸入等辦法使實參獲得確定值
註:
(1)在大部分情況下修改形參的值不改變對應的形參值
1 # __author__ = "wyb" 2 # date: 2018/3/21 3 # 形參與實參 4 5 6 def f(a): # a為形參 7 print("a is", a) 8 a += 1 9 print("a is", a) 10 11 12 n = 3 13 f(n) # n為實參 14 print("n is", n) 15 # 從結果可以看出在此程序中函數內部修改了形參的值,但是 16 # 對應的實參並沒有發生改變形參與實參
(2)但是在有些情況下可以通過特殊的方式在函數內部修改實參的值,如果傳遞給函數的是python可變序列,比如說列表、字符串,並且在函數內部使用下標或其他方法使可變序列增加、刪除元素或修改元素值時,修改後的結果是可以反映到函數之外讓實參發生修改
1 # __author__ = "wyb" 2 # date: 2018/3/21 3 # 形參修改實參值(利用python可變序列) 4 5 6 def modify(v, item): 7 v[0] = v[0] + 1 # 修改列表元素值 8 v.append(item) # 為列表元素增加值 9 10 11 def modify2(d): 12 d[‘age‘] = 18 13 14 15 # 修改列表: 16 a = [1, 3, 6, 9] 17 print(a) 18 modify(a, 666) 19 print(a) 20 21 # 修改字典: 22 d = {‘name‘: ‘wyb‘, ‘age‘: 21} 23 print(d) 24 modify2(d) 25 print(d)形參修改實參值(利用python可變序列)
2.多個參數的傳遞
可以傳遞多個參數,多個參數之間用逗號隔開
在傳參的角度上,調用函數時傳參數有兩種方式:
(1)按照位置傳參數
(2)按照關鍵字傳參數
用法:1.位置參數必須在關鍵字參數的前面
2.對於一個參數只能賦值一次
示例:
1 # __author__ = "wyb" 2 # date: 2018/3/21 3 # 傳遞多個參數,實現比大小的功能 4 5 6 def cal_max(a, b): # 位置參數:按順序定義參數 7 if a > b: 8 return a 9 else: 10 return b 11 12 13 # 1.按照位置傳參: 14 print(cal_max(20, 30)) 15 print(cal_max(10, 20)) 16 # 2.按照關鍵字傳參: 17 print(cal_max(b=50, a=30)) 18 # 3.位置和關鍵字傳參混搭: 19 print(cal_max(10, b=30))多個參數的傳遞
3.默認參數
python支持默認參數,即在定義函數時為形參設置默認值。在調用帶有默認值參數的函數時,可以不用為設置了默認值的參數進行傳值,此時函數將直接使用函數定義時設置的默認值進行傳值。默認參數與下面的可變長參數均可以實現類似於函數重載的目的。
1 # 默認參數的使用: 2 def 函數名(...,形參名=默認值): 3 函數體
調用帶有默認參數的函數時,可以不對默認參數進行賦值,也可以通過顯式賦值來替換其默認值,具有極大的靈活性
1 # 默認參數實例: 2 3 4 def cal_sum(x, y=10): 5 return x + y 6 7 8 print("return of the sum(2, 3) is", cal_sum(2, 3)) 9 print("return of the sum(3) is", cal_sum(3))默認參數實例
註: 參數裏既有默認參數也有普通參數時應該把普通參數放在默認參數左邊,也就是說默認參數必須出現在函數形參列表的最右端且任何一個
默認參數右邊都不能出現非默認參數(普通參數)
如下圖所示:
4.關鍵參數
關鍵參數主要是指調用函數時的參數傳遞方式,而與函數定義無關。通過關鍵參數可以按參數名字傳遞值,實參順序可以和形參順序不一致,但不影響參數值的傳遞過程,避免了用戶需要牢記參數位置和順序的麻煩,使得函數調用和參數傳遞更方便。
註: 關鍵參數即為上面多個參數的傳遞中的按照關鍵字傳遞
1 # __author__ = "wyb" 2 # date: 2018/3/21 3 # 關鍵參數示例 4 5 6 def demo(a, b, c=5): 7 print(a, b, c) 8 9 10 demo(3, 4, 2) # 輸出: 3 4 2 11 demo(c=1, b=2, a=6) # 輸出: 6 2 1關鍵參數示例
5.可變長參數(*args和**kwargs)
可變長參數,也有人稱之為動態參數,分別由*args和*kwargs接收參數,前者接收任意多個實參並將其放在一個元組中,後者接受類似於關鍵參數一樣顯式賦值形式的多個實參並將其放入字典中
1 # 元組可變長參數: 用*來標記 2 def show_message(message, *args): 3 for name in args: 4 print(message, name) 5 6 7 # 字典可變長參數: 用**標記 8 def check_book(**kwargs): 9 price = kwargs.get(‘Price‘, 0) 10 if price > 100: 11 print("**********The book is expensive!**********") 12 print("The book information are as follow: ") 13 for key in kwargs.keys(): 14 print(key, ": ", kwargs[key]) 15 print() 16 17 18 show_message("Good morning!", ‘Jack‘, ‘Tom‘, ‘Alex‘) 19 check_book(author=‘James‘, Title=‘Economics‘, Price=87) 20 check_book(author=‘Jack‘, Title=‘Frans‘, Price=120, Date=‘2012-3-2‘) 21 check_book(Date=‘2003-8-9‘, author=‘Linda‘, Title=‘Chinese‘, Price=107) 22 check_book(author=‘Jin Lady‘, Title=‘English‘, Price=65) 23 check_book(author=‘Woz‘, Title=‘Python‘, Price=70) 24 check_book(author=‘clear‘, Title=‘Ruby‘, Date=‘2009-8-1‘)可變長參數示例
上述代碼中第一個函數中的參數為第一種可變長參數的用法,即無論調用該函數時傳遞了多少實參,都將其放入元組中;
第二個函數值的參數則為第二種可變長參數的用法,即在調用該函數時自動將接受的參數轉換成字典。
python進階第1篇 函數入門