1. 程式人生 > >python,函式的基本用法

python,函式的基本用法

一.函式

函式的概念:對功能或者動作的封裝可以幫我們把一段公共的程式碼提取出來

語法如下

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", "$$", "@@")