函數的初識 + why:以功能(完成一件事:輸入密碼、登錄、註冊、獲取長度等)為導向。 一個函數只能封裝一個主要功能。具有減少重覆代碼,可讀性高等優點。(可類比len函數) + when:函數可以隨時調用 這樣寫,重覆代碼太多且代碼的可讀性差 + 對上放代碼進行改進,定義一個函數: + how: ...
函數的初識
- why:以功能(完成一件事:輸入密碼、登錄、註冊、獲取長度等)為導向。 一個函數只能封裝一個主要功能。具有減少重覆代碼,可讀性高等優點。(可類比len函數)
- when:函數可以隨時調用
#假設python沒有len函數,請你用代碼算出給定任意字元串、列表等的長度,務必請自己編寫一下,參考如下:
s1 = 'asdfghjkl'
len = 0
for i in s1: #當要遍歷一個可迭代對象時經常用for
len += 1
print(len) #9
len = 0
l1 = [1,2,3,4,5,6,7]
for i in l1:
len += 1
print(len) #7
這樣寫,重覆代碼太多且代碼的可讀性差
對上放代碼進行改進,定義一個函數:
def My_Len(s): len = 0 for i in s: len += 1 print(len) #測字元串/列表的長度: s1 = 'asdfghjkl' My_Len(s1) #9 l1 = [1,2,3,4,5,6,7] My_Len(l1) #7
how:函數以def定義後再加一個空格再加上函數名(取的函數名最好具有描述性)再加上一個英文冒號,示例如下:
def HanShu(): #def 函數名(): pass # 函數主題 return 返回值 # return 返回值,可有可無
- 函數名與變數設置相同,一般以駝峰命名法(HanShu、hanShu、Hanshu),函數名後一定要加()和:
- 函數體中最好不要寫print(),函數體向前縮進一個Tab
- 當編寫的代碼中包含 函數名() 後,函數會被執行。
- 函數的返回值return: 在函數中遇到return直接結束函數的調用;並給函數外部返回一個返回值,將數據返回給函數的執行者、調用者。返回值可被print列印出,若無返回值,print會列印出None。
- return可返回多個值,會以元祖的形式將多個元素返回給函數的執行者。(元祖可以進行拆包)
函數的傳參:讓函數封裝的這個功能變為動態可傳入的(盤活)。參數分為實參和形參
實參:函數的執行時傳入的參數
形參:函數的定義時接受的參數
def func(a): #a:形參,定義函數時定義的參數,若定義了形參,則調用函數時必須向函數傳入 實參。(特殊情況後文再說) a += 1 return a print(func(6)) #調用函數 6:傳入的實參。 >>>7
實參角度:
位置參數:按照實參位置參數與形參的對應順序(從左到右)依次傳入。
def func(a,b): c = a / b return c print(func(10,2)) >>>5.0 #只要運算符中有除法,得出來的答案都是浮點數
關鍵字參數:當形參過多時,需要將實參傳入的順序記住,容易出錯。關鍵字參數無需順序
def func(name,sex,hight,weight): c = '我叫{},性別{},體重是{},身高{}'.formt(name,sex,weight,hight) return r print(func('山就在那兒','男','60Kg','1.7m')) #python預設從左至右將實參傳給形參,當形參過多時容易出錯,但可以使用關鍵字參數傳入。 >>>我叫山就在那兒,性別男,體重是1.7m,身高60Kg print(func(name='山就在那兒',sex='男',weight='60Kg',hight='1.7m')) >>>我叫山就在那兒,性別男,體重是60Kg,身高1.7m
混合傳參:位置參數一定要放在關鍵字參數前方,關鍵字參數一定要放在位置參數後面。否則會報錯。
def func(name,sex,hight,weight): c = '我叫{},性別{},體重是{},身高{}'.formt(name,sex,weight,hight) return r print(func('山就在那兒','男',weight='60Kg',hight='1.7m')) >>>我叫山就在那兒,性別男,體重是60Kg,身高1.7m
知識點補充:三元運算符:簡單的if-else語句可以簡化為三元運算符。
#判斷a,b的大小 a = 10 b = 11 c = a if a>b else b print(c) 11 #c = a if a>b else b 等同於: if a>b: c = a else: c = b
#定義一個函數:能為函數傳入兩個參數,列印出兩個參數中最大的一個參數 def ComPlie(a,b): c = a if a>b else b return c print(ComPlie(11,10)) >>>11 #編碼進階: def ComPlie(a,b): return a if a>b else b #return的為c,因此可以將兩個c合併,並省去參數c print(ComPlie(11,10))
形參角度:
位置參數:形參位置參數必須與實參一一對應,與實參位置參數一樣,只是觀察角度不同,不再多敘述。
預設參數(預設值參數):若有位置參數,預設參數一定要在位置參數後面,預設參數可以被更改。可參考open函數的預設參數。
實參與形參必須一一對應,不可一對多或者多對一,否則會報錯。建議讀者自測一遍。
def func(a,b,c=10): d = (a + b)/c return d print(func(9,1)) >>>1 print(func(5,3,c=2)) >>>4 print(func(5,3,2)) #實參傳入預設參數時關鍵字可以不寫,但不推薦此方法。 >>>4
還有兩種形參類型,請看明天的python基礎學習day10