python,函式的基本用法
阿新 • • 發佈:2018-11-01
一.函式
函式的概念:對功能或者動作的封裝可以幫我們把一段公共的程式碼提取出來
語法如下
def 函式名(形參): 函式體 函式名(實參) # 函式名() def yue(): print("1. 開啟手機") print("2. 開啟陌陌") print("3. 找個漂亮的小姐姐") print("4. 探討一下人生") print("5. 一起出來happy") yue() # 執行一次函式 print("休息休息") yue() # 再來一次 print(yue)
二.函式的返回值
return, 終止函式的執行
1. 函式內部不寫return, 預設在最後返回None
2. 函式只寫了return 返回None
3. return 值 有一個返回值
4. return 值1, 值2, 值3 .... 有多個返回值
返回值返回給呼叫方
例一 def yue(): print("1. 開啟手機") print("2. 開啟陌陌") print("3. 找個漂亮的小姐姐") print("4. 探討一下人生") print("5. 一起出來happy") ret = yue() print(ret) 例二 def yue(): print("1. 開啟手機") print("2. 開啟陌陌") return print("3. 找個漂亮的小姐姐") print("4. 探討一下人生") print("5. 一起出來happy") 例三 def yue(): print("1. 開啟手機") print("2. 開啟陌陌") print("3. 找個漂亮的小姐姐") print("4. 探討一下人生") print("5. 一起出來happy") return "漂亮的小姐姐" # 返回到哪兒了???? 誰呼叫的就返回給誰 例四 def yue(): print("1. 開啟手機") print("2. 開啟微信") print("3. 找個漂亮的小姐姐") print("4. 探討一下人生") print("5. 一起出來happy") return "漂亮的小姐姐","大媽", "大爺", "鮮肉" # 返回到哪兒了???? 誰呼叫的就返回給誰 ret = yue() # ('漂亮的小姐姐', '大媽', '大爺', '鮮肉') print(ret)
三.函式的引數(一部分)
形參: 在函式宣告位置的變數
1. 位置引數2. 預設值引數
def regist(id, name, age, gender="男"): # 從語法上講. 不允許, 從程式碼執行也不允許 print(id, name, age, gender) regist(3, "王大錘", 20) regist(4, "李鴻潔", 18, "女")
3. 混合引數 位置引數, 預設值引數
4. 動態傳參, *args, **kwargs
實參: 在函式呼叫的時候給函式傳遞的具體的值
1. 位置引數
def chi(good_food, junk_food,drink, sweet, xiaoshi, lingshi1, lingshi2, lingshi3, good_food2, xiaoye, shuiguo): print(good_food, junk_food, drink, sweet) chi("豬蹄", "北冰洋", "哈根達斯", "薯條", "罐頭", "大米飯") def chi(good_food, junk_food,drink, sweet): print(good_food, junk_food, drink, sweet) chi("大米飯", "豬蹄", "北冰洋", "哈根達斯")
2. 關鍵字引數
def chi(good_food, junk_food,drink, sweet): print(good_food, junk_food, drink, sweet) # 關鍵字引數: 必須按照形參的名字來傳遞資訊 chi(good_food="大米飯", sweet="哈根達斯", drink="飲料", junk_food="薯條")
3. 混合引數
def chi(good_food, junk_food, drink, sweet): print(good_food, junk_food, drink, sweet) chi("大米飯", "薯條", sweet="哈根達斯", drink="北冰洋") # positional argument follows keyword argument
順序: 位置, 關鍵字
傳參: 把實參賦值給形參的過程
四.函式的應用
1.註冊 def regist(): f = open("account", mode="r+", encoding="utf-8") while 1: # 輸入使用者名稱和密碼 username = input("請輸入你的使用者名稱:") password = input("請輸入密碼:") for line in f: if line.strip().split(":")[0] == username: print("對不起, 該使用者已經註冊!") break else: print("恭喜, 註冊成功") f.write("\n"+username+":"+password) # break # 能執行到這個break. for一定是執行完了的. f.flush() f.close() return # 直接結束函式的呼叫 regist() 2.登入 def login(): username = input("請輸入使用者名稱:") # sylar:123 password = input("請輸入密碼:") # 123 f = open("account", encoding="utf-8") for line in f: if line.strip() == username + ":" + password: print("恭喜你.登入成功 ") return True # True, 登入成功 else: print("對不起, 使用者名稱或密碼錯誤") return False # False 登入失敗 login() login() login() login()
練習六..作業
1.寫函式,檢查獲取傳入列表或元組物件的所有奇數位索引對應的元素,並將其作為新列表返回給呼叫者。 def func(lst): return lst[1::2] print(func(['王大錘','劉亦菲','曾小賢','王祖賢','張柏芝','陳小春'])) 2.寫函式,判斷使用者傳入的物件(字串、列表、元組)長度是否大於5。 def func(lst): return len(lst)>5 print(func([1,2,2])) 3.寫函式,檢查傳入列表的長度,如果大於2,將列表的前兩項內容返回給呼叫者。 def func(lst): if len(lst)>2: return lst[:2] print(func([1,2])) 4.寫函式,計算傳入函式的字串中, 數字、字母、空格 以及 其他內容的個數,並返回結果。 def func(s): shuzi = 0 zimu = 0 kongge = 0 qita = 0 for c in s: if c.isdigit(): shuzi+=1 elif c.isalpha(): zimu+=1 elif c== " ": kongge+=1 else: qita += 1 print(shuzi,zimu,kongge,qita) return shuzi,zimu,kongge,qita func("hidjhdsfhfhsdsd2323453478%R$%$%$%+--==-g-//..,l") 5.寫函式,接收兩個數字引數,返回比較大的那個數字。 方案一 def func(a, b): if a > b: return a else: return b 方案二 def func(a, b): return a if a > b else b # a>b? a:b 6.寫函式,檢查傳入字典的每一個value的長度,如果大於2,那麼僅保留前兩個長度的內容,並將新內容返回給呼叫者。dic = {"k1": "v1v1", "k2": [11,22,33,44]} PS:字典中的value只能是字串或列表 def func(dic): dd = {} for k, v in dic.items(): if len(v) > 2: v = v[:2] dd[k] = v return dd dic = {"k1": "v1v1", "k2": [11,22,33,44]} print(func(dic)) 7.寫函式,此函式只接收一個引數且此引數必須是列表資料型別, 此函式完成的功能是返回給呼叫者一個字典,此字典的鍵值對為此列表的索引及對應的元素。例如傳入的列表為:[11,22,33] 返回的字典為 {0:11,1:22,2:33}。 def func(lst): dic = {} for i in range(len(lst)): # 索引 0 1 2 dic[i] = lst[i] return dic print(func([11,22,33])) 8.寫函式,函式接收四個引數分別是:姓名,性別,年齡,學歷。 使用者通過輸入這四個內容,然後將這四個內容傳入到函式中, 此函式接收到這四個內容,將內容追加到一個student_msg檔案中。 def func(name,edu, age, gender="男"): f = open("student_msg", mode="a", encoding="utf-8") f.write(name+"$$"+gender+"$$"+edu+"$$"+age+"\n") f.flush() f.close() 9.題升級:支援使用者持續輸入,Q或者q退出,性別預設為男, 如果遇到女學生,則把性別輸入女 while 1: content = input("請輸入姓名,年齡,學歷,性別(周杰倫,18,小本,)(q退出)") if content.upper() == "Q": break lst = content.split(",") if len(lst) <= 3 or lst[3] == '': func(lst[0], lst[2], lst[1]) else: func(lst[0], lst[2], lst[1], lst[3] ) def func(s="男"): print(s) func() 10.寫函式,使用者傳入修改的檔名,與要修改的內容,執行函式,完成檔案的修改操作(升級題)。 def func(file_path, old, new): with open(file_path, mode="r", encoding="utf-8") as f1, \ open(file_path + "_副本", mode="w", encoding="utf-8") as f2: for line in f1: s = line.replace(old, new) f2.write(s) os.remove(file_path) os.rename(file_path+"_副本", file_path) func("student_msg", "$$", "@@")