函數讓代碼的編寫,閱讀,測試和修改都變得更容易,提高代碼的復用性,python中使用def關鍵字定義函數
如下代碼在python3.7.3的Genay開發工具中編寫測試通過。
一、簡單函數定義及調用
def say_hi(): print("hi") say_hi()
二、傳遞參數
def say_hi(name): print("hi, "+name) say_hi("jesee")
三、實參傳遞
1、位置實參
位置實參中位置很重要,位置不正確,得到的結果和邏輯上應該出現的結果不同,並且出現邏輯錯誤。
def out(name,addr): print(name+" address: " + addr) out('xiao','henan') out('beijing','auth')
第一次調用out方法正確輸出,第二次調用out方法傳遞的參數不正確,造成輸出結果邏輯錯誤。
2、關鍵字實參
傳遞一對“形參名稱-實參值”,參數傳遞與位置無關,因此向函數傳遞實參時不會混淆。關鍵字參數在參數調用時傳遞,並且必須在位置參數之后調用,如下兩個參數都使用了關鍵字實參
def out(name,addr): print(name+" address: " + addr) out('xiao','henan') out(addr='beijing',name='auth')
雖然第二次調用out方法時,傳遞的參數位置順序與方法定義不同,但輸出結果與邏輯上希望輸出的結果一致。關鍵字參數能明確的指出每個參數所被傳遞的實參。方法更易閱讀,加上位置順序,則更易於維護,但缺點是代碼較多。
四、參數默認值
默認人員的地址均在北京,如果傳遞了地址參數,則使用傳遞的地址參數,若未傳遞地址,則使用默認的地址,參數默認值在聲明方法時定義。
def out(name,addr='beijing'): print(name+" address: " + addr) out('xiao','henan') out('auth')
五、函數返回值
python函數可以返回簡單字符串或者其他數據類型
def get_name(): return "xiao" def get_list(): return ['a','b','c'] def get_dict(): return {"country":"china","lanage":"chinese"} name=get_name() ls=get_list() gdict=get_dict() print(name) print(ls) print(gdict)
六、示例:接收用戶輸入,當用戶輸入quit時,退出,否則將用戶輸入的數據記錄起來,最多輸入5次
def receive_and_output(): i=0; ls=[] recv="" while(recv != "quit" and i <5): recv=input("pls input something: ") ls.append(recv) i+=1 return ls ls=receive_and_output() print(ls)
輸入5次,滿足條件,退出輸入,並輸出用戶輸入內容
輸入quit,滿足條件,退出輸入,並輸出用戶輸入內容
七、示例:傳遞並修改列表
def receive_and_modify_list(ls): for v in ls: print(v) ls.append("nice") ls=['a','b'] receive_and_modify_list(ls) print(ls)
八、傳遞任意數量的實參
def pass_any_param(*params): for v in params: print (v) pass_any_param(1,2,'yes')
九、傳遞位置實參和任意數量實參
此時任意數量實參需要放在最后,且只能有一個任意數量實參。
def more_param(name,*params): ls=[] ls.append(name) for v in params: ls.append(v) return ls ls=more_param('xiao','12','bj','shunyiqu') print(ls)
十、方法中的變量屬於局部變量,方法外不能訪問
def get_list(): ls=['a','b'] get_list() print(ls)