天天看點

函數的初始、函數的定義、函數的調用、函數的傳回值、函數的參數

1、函數的作用:封裝代碼、大量的減少了重複的代碼。

2、全局空間:頂行寫的就是全局空間。

圖解 :

函數的初始、函數的定義、函數的調用、函數的傳回值、函數的參數

3、函數的定義:

def 是一個關鍵字、申明要定義一個函數

my_len 函數的名字、遵循變量命名的規則

()固定結構、用來傳參

:表示語句結束

縮進

函數體(縮進體)

4、函數定義結構:

def 函數名():

  函數體

5、函數的調用:

函數名+()

函數被調用後、函數體中開辟的空間會自動銷毀。

6、傳回值:

return 能夠終止函數,return下方的代碼不執行

return 能夠傳回任意多個資料類型(python中所有對象)、以元組的形式接受

函數體中不寫return預設傳回None、或者寫了return不寫值傳回的也是None

return 将傳回值傳回給調用者

7、拆包、解包、平行指派:

def func():
    a = 10
    b = 20
    return a,b
a,b = func()
print(a,b)
8、函數中寫for、for裡面寫了return、終止的是函數
9、函數運作圖解:
      

10、形參、實參、傳參。

在定義函數的階段就是形參

在調用函數的階段就是實參

将實參傳遞給形參的過程就是傳參

傳參的時候相當于在目前函數體中進行了指派操作

def yue(app,girl,age,addr):
    print("掏出手機")
    print(f"打開{app}")
    print(f"找一位{girl},要求年齡:{age},地區:{addr}的人")
    print("聊一聊")
    print("約一約")
yue("微信","女孩",18,"烏克蘭")
12、參數優先級:位置參數 > 預設參數
13、預設參數:
可以不傳參、可以傳參、傳參就是把預設的值覆寫      
def userinfo(name,age,hobby,sex = "男"):
    print(f"姓名:{name} 年齡:{age} 性别:{sex} 愛好:{hobby}")
userinfo("嶽新力",23,"開車")
14、關鍵字傳參:
指名道姓的方式進行傳參      
def func(a,b,c=1,d=2):
    print(a,b,c,d)
func(1,2,c=4)
作業題:
      
# 1、寫函數,檢查擷取傳入清單或元組對象的所有奇數位索引對應的元素,并将其作為新清單傳回給調用者
def func(arg):
    lst = []
    lst.append(arg[1::2])
    return lst
li = [11,22,33,44,55,66,77]
print(func(li))
# 2、寫函數,判斷使用者傳入的對象(字元串、清單、元組)長度是否大于5
def func(arg):
    if len(arg) > 5:
        print("大于")
    else:
        print("不大于")
li = [11,22,33,44,55,66,77]
func(li)
# 3、寫函數,檢查傳入清單的長度,如果大于2,那麼僅保留前兩個長度的内容,并将新内容傳回給調用者
def func(arg):
    lst = []
    if len(arg) > 2:
        lst.append(arg)
    return lst[0][0:2]
li = [11,22,33,44,55,66,77]
print(func(li))
#4、寫函數,計算傳入函數的字元串中,[數字]、[字母和中文]以及 [其他]的個數,并傳回結果
def func():
    num_sum = 0
    alpha_num = 0
    other_num = 0
    content = input("請輸入字元串:")
    for i in content:
        if i.isdecimal():
            num_sum += 1
        elif i.isalpha():
            alpha_num += 1
        else:
            other_num += 1
    return f"數字:{num_sum} 中文和字母:{alpha_num} 其他{other_num}"
print(func())
#5、寫函數,接收兩個數字參數,傳回比較大的那個數字
print(max(1,10))
#6、寫函數,檢查傳入字典的每一個value的長度,如果大于2,那麼僅保留前兩個長度的内容,并将新内容傳回給調用者
#dic = {"k1": "v1v1", "k2": [11,22,33,44]}
# 字典中的value隻能是字元串或清單
dic = {"k1":"v1v1","k2":[11,22,33,44]}
def func(dic1):
    for i in dic1:
        if len(dic1[i]) > 2:
            dic1[i] = dic1[i][:2]
    return dic1
print(func(dic))
#7、寫函數,此函數隻接收一個參數且此參數必須是清單資料類型,此函數完成的功能是傳回給調用者一個字典,此字典的鍵值對為此清單的索引及對應的元素。例如傳入的清單為:[11,22,33] 傳回的字典為 {0:11,1:22,2:33}
lst = [11,22,33]
dic = {}
def func(lst):
    for k,v in enumerate(lst):
        dic[k] = v
func(lst)
print(dic)
#8、寫函數,函數接收四個參數分别是:姓名,性别,年齡,學曆。使用者通過輸入這四個内容,然後将這四個内容傳入到函數中,此函數接收到這四個内容,将内容追加到一個student_msg檔案中
f = open("student_msg","a",encoding="utf-8")
def userinfo(name,sex,age,edu):
    f.write(f"姓名:{name} 性别:{sex} 年齡:{age} 學曆:{edu}\n")
userinfo(input("name:"),input("sex:"),input("age:"),input("edu"))
#9、對第9題更新:支援使用者持續輸入,Q或者q退出,性别預設為男,如果遇到女學生,則把性别輸入女
f = open("student_msg","a",encoding="utf-8")
def userinfo(name,age,edu,sex = "男"):
    f.write(f"姓名:{name} 性别:{sex} 年齡:{age} 學曆:{edu}\n")
while True:
    a = input("name:")
    b = input("sex:")
    c = input("age:")
    d = input("edu:")
    if a.upper() == "Q":
        break
    if b == "女":
        userinfo(a,c,d,b)
    else:
        userinfo(a,c,d)
#10、寫函數,使用者傳入修改的檔案名,與要修改的内容,執行函數,完成整個檔案的批量修改操作(選做題)
def file_change(old_file_name,new_file_name,old_centent,new_centent):
    with open(old_file_name,"r",encoding="utf-8") as f,\
            open(new_file_name,"a",encoding="utf-8") as f1:
            for i in f:
                f1.write(i.replace(old_centent,new_centent))
    import os
    os.rename(old_file_name,old_file_name + ".bak")
    os.rename(new_file_name,old_file_name)
file_change("student_msg","userinfo","18","81")