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")