溫馨提示:手機(jī)觀看時睡毒,代碼塊可以左右滑動
函數(shù)
- 函數(shù)是組織好的缴淋,可重復(fù)使用的的代碼段敢订;
- 函數(shù)能提高應(yīng)用的模塊性,和代碼的重復(fù)利用率厅缺。
定義函數(shù)與調(diào)用函數(shù)
- 以 def 關(guān)鍵詞開頭梅掠,后接函數(shù)名,函數(shù)名后接 ()店归;
- ()之間可以用于定義參數(shù)阎抒;
- 函數(shù)內(nèi)容以冒號起始,并且轉(zhuǎn)行縮進(jìn)消痛;
- return代表著函數(shù)結(jié)束且叁,選擇性地返回一個值給調(diào)用函數(shù)。
#定義函數(shù)基本格式如下:
def 函數(shù)名(參數(shù)表):
函數(shù)語句
return 返回值
#參數(shù)和返回值都不是必須有的秩伞,例如:
def hello(): #定義函數(shù)
print("hello world")
hello() #調(diào)用函數(shù),返回hello world
#而下面這個例子是為函數(shù)定義了兩個參數(shù)逞带,并用return語句返回值。
def add(a,b): #定義函數(shù)
return(a+b)
add(1,3) #調(diào)用函數(shù),返回4
函數(shù)參數(shù)(重點)
- 定義函數(shù)時纱新,參數(shù)表中的參數(shù)稱為形式參數(shù)展氓,簡稱形參;
- 調(diào)用函數(shù)時脸爱,參數(shù)表中的參數(shù)稱為實際參數(shù)遇汞,簡稱實參。
參數(shù)具有多態(tài)性
- 傳入不同類型變量,得到不同結(jié)果空入。
def duo(a,b): #定義函數(shù)
return(a+b)
duo(1,4) #調(diào)用傳入兩個int值,返回結(jié)果5
duo("oh"," my god") #調(diào)用并傳入兩個字符串,返回結(jié)果'oh my god'
duo((3,4),("g","h")) #調(diào)用并傳入兩個元組,執(zhí)行元組合并,返回(3, 4, 'g', 'h')
duo([7,4],[6,7,8,9]) #調(diào)用并傳入兩個列表,執(zhí)行列表合并,返回[7, 4, 6, 7, 8, 9]
參數(shù)賦值傳遞
- 函數(shù)調(diào)用時按參數(shù)的先后順序络它,將實參傳遞給形參;
- 可以以形參賦值的方式歪赢,指定將實參傳遞給形參化戳。
def fu(a,b):
return(a+b) #定義函數(shù)
fu("ab","cd") #返回"abcd",按對應(yīng)位置將實參傳遞給了形參埋凯;
fu(b="cd",a="ab") #依然返回"abcd",通過形參賦值傳參点楼。
可變參數(shù)(小心使用)
- 當(dāng)實參是可變對象時,如列表白对、字典盟步。如在函數(shù)中修改形參,因為共享引用躏结。通過實參也獲得修改后的對象;
- 詳見以下例子狰域。
def kebian1(k): #定義函數(shù)
k[1] = "hello"
x = [9,10]
kebian1(x) #調(diào)用函數(shù),傳遞列表對象的引用
print(x) #返回[9, 'hello'],變量原本的引用被修改
#嗯哼~那么問題來了!!我們應(yīng)該如何規(guī)避這個問題?(看下行的時候請先思考)
#------------------------------------------------------------------
#我們規(guī)避的思路就是媳拴,復(fù)制一份,將克隆的傳入形參兆览。原本變量不受影響屈溉,如下例:
k = [1,2]
kebian1(k[:]) #調(diào)用函數(shù),傳遞拷貝下來的變量
print(k) #返回[1, 2],變量沒被改變
#還可以在函數(shù)內(nèi)對列表進(jìn)行拷貝抬探,如下例:
def kebian2(k): #定義函數(shù)
k = q[:] #拷貝
k[1] = 'hello'
q = [3,4]
kebian2(q) #調(diào)用函數(shù),傳遞列表對象的引用
print(q) #返回[3, 4]子巾,變量沒被改變
參數(shù)默認(rèn)值
- 在定義函數(shù)的時候,我們可以給參數(shù)設(shè)置一個默認(rèn)值小压。這樣我們在調(diào)用函數(shù)未提供實參時线梗,函數(shù)將按照默認(rèn)參數(shù)執(zhí)行;
- 帶默認(rèn)值的參數(shù)怠益,應(yīng)當(dāng)放在參數(shù)表的末尾仪搔;
- 為避免出錯,默認(rèn)參數(shù)必須指向一個不可變參數(shù)蜻牢。
def info(name = "",degree = "未填寫"): #定義函數(shù)烤咧,并將參數(shù)degree賦予一個默認(rèn)值“未填寫”
print(name,degree)
info("熊貓醬") #當(dāng)只輸入一個實參時,會返回熊貓醬 未填寫
info("熊貓醬","博士") #當(dāng)輸入兩個實參時,會返回熊貓醬 博士
傳遞任意個參數(shù)
- 定義函數(shù)是,若參數(shù)名前帶有"*"號抢呆,則表示可接受任意個數(shù)的參數(shù)煮嫌,并保存在一個元組中;
- 傳參時,"*"號后面的參數(shù)必須以關(guān)鍵字傳參抱虐。
def add(a,*b,c): #定義函數(shù)
s = a+c
for i in b: #為了保證語法不出錯,當(dāng)函數(shù)帶有"*"號的參數(shù)時,需要用for循環(huán)來循環(huán)元組內(nèi)內(nèi)容
s += i
return s
add(1,2,4,c=9) #返回結(jié)果16,注意*b,后面的參數(shù),傳參是必須帶上關(guān)鍵字昌阿。
上一篇:Python基礎(chǔ)筆記3-列表、元組、字典
下一篇:Python基礎(chǔ)筆記5-簡說面向?qū)ο髉art1