函數的定義
python定義函數使用def關鍵字
return[表達式]語句用於退出函數,選擇性的向調用方返回一個表達式,不帶參數值的return語句返回none
def 函數名(參數列表): 函數體
def get_money_fromATM(cardno,password,money): #密碼要求是6位字符串類型 if type(password) is str and len(password)==6: print('密碼正確') else: print('密碼格式錯誤') #金額小於3000元的能被100整除的整數 if type(money) is int : if money%100==0 and money<=3000: print('金額正確') else: print('金額格式錯誤,請重新輸入') get_money_fromATM(12412412412,'123456',2300) #運行結果 密碼正確 金額正確
#計算面積的函數 def z(x,y): i=x*y print(i) z(2,7) #運行結果: 14
def sum(x,y): z=x+y print('函數內',z) #調用的函數中沒有return表達式 z=sum(5,9) print('函數外',z) #運行結果 函數內 14 函數外 None
def sum(x,y): z=x+y print('函數內',z) return z #調用的函數中沒有return表達式 z=sum(5,9) print('函數外',z) #運行結果 函數內 14 函數外 14
可變參數
def sum(*lst): 參數前面加一個星號,表示這個參數是可變的,也就是說可以接受多個參數,將這些參數構成一個元組,只能通過為止參數傳參
可變參數有兩種形式:
- 位置可變參數 : 參數前加一個星號,參數構成一個元組,參數只能以 位置參數 的形式傳參
- 關鍵字可變參數 : 參數前加兩個星號,參數構成一個字典,參數只能以 關鍵字參數 的形式傳參
當默認參數和可變參數一起出現的時候,默認參數相當於普通參數
通常來說:
- 默認參數靠后
- 可變參數靠后
- 默認參數和可變參數不同時出現
keyword-only: 必須以Key->Value對的形式出現的,叫做keyword-only
參數的傳遞
傳遞不可變對象實例
def jiaohuan(m,n): temp=m m=n n=temp return a=2 b=3 print(a,b) jiaohuan(a,b) print(a,b) #運行結果 2 3 2 3
調用函數時可使用的正式參數類型:必需參數、關鍵字參數、默認參數、不定長參數
必需參數
必需參數須以正確的順序傳入函數。調用時的數量不須和聲明時的一樣
調用printme函數,必須傳入一個參數,不然會出現語法錯誤
def printme(str): "打印任何傳入的字符串" print(str) printme("調用printme函數") #運行結果 調用printme函數
關鍵字參數
關鍵字參數和函數調用關系緊密,函數調用使用關鍵字參數來確定傳入的參數值
使用關鍵字參數允許函數調用時參數的順序與聲明時不一致,因為python解釋器能夠用參數名匹配參數值
def printme(str): "打印任何傳入的字符串" print(str) printme(str="調用printme函數") #運行結果 調用printme函數
參數的默認值
def inc(base,x=1): 給第二個參數設置一個默認值,若是不傳遞參數,則使用默認的參數值,若是傳遞參數,則使用傳遞的參數值
默認參數
調用函數時,如果沒有傳遞參數,則會使用默認參數,默認參數只能放在參數列表的最后一個,但可以有多個默認參數
def sum(name,age=50): print(name,age) name='白雲' age=45 sum(name,age) #運行結果 白雲 45
不定長參數
你可能需要一個函數能處理比當初聲明時更多的參數,這些參數叫做不定長參數,聲明時不會命名
加了星號的變量名會存放所有未命名的變量參數。如果在函數調用時沒有指定參數,它就是一個空元組,我們也可以不向函數傳遞未命名的變量
def printinfo(str,*varchar): '打印任何輸入的字符串' print('輸出:') print(str) for var in varchar: print(var) #調用函數printinfo printinfo(10) printinfo(70,60,50,40,30) #運行結果 輸出: 10 輸出: 70 60 50 40 30
匿名函數
python使用laabda來創建匿名函數
所謂匿名,即不再使用def語句這樣標准的形式定義一個函數
sum=lambda x,y:x+y print(sum(1,2)) #運行結果 3