1. 什么是函數(shù)
函數(shù)是對(duì)實(shí)現(xiàn)某一特定功能的代碼塊的封裝
2. 函數(shù)的分類
系統(tǒng)函數(shù)(內(nèi)置函數(shù))-- 系統(tǒng)已經(jīng)實(shí)現(xiàn)函數(shù)(已經(jīng)造好的機(jī)器),程序員只需要調(diào)用就行
print(), input(), len(), sum(), max()自定義函數(shù) -- 程序員自己聲明的函數(shù)(自己造機(jī)器)
3. 函數(shù)的聲明(定義)
3.1 語法:
def 函數(shù)名(形參列表):
函數(shù)說明文檔
函數(shù)體
3.2 說明
def -- python聲明函數(shù)的關(guān)鍵字
函數(shù)名 -- 標(biāo)識(shí)符夷野,不能是關(guān)鍵字归苍,和變量名要求一樣
見名知義谓厘,所有字母小寫剂娄,多個(gè)字符用下劃線隔開
() -- 固定寫法
形參列表 -- 變量1艾栋, 變量2乏苦, 變量3, ....(根據(jù)情況變量名的個(gè)數(shù)可以是0個(gè)读规,1個(gè)和多個(gè))
形參作用:是將函數(shù)外面的數(shù)據(jù)傳遞到函數(shù)的里面
: -- 固定寫法
函數(shù)體 -- 與def 保持一個(gè)縮進(jìn)的一條或多條語句(實(shí)現(xiàn)功能的代碼塊)
函數(shù)說明文檔 -- 對(duì)函數(shù)功能抓督、參數(shù)和返回值的說明
3.3 初學(xué)者聲明函數(shù)的步驟
1) 確定函數(shù)的功能
2) 根據(jù)功能確定函數(shù)名
3) 確定形參(看實(shí)現(xiàn)函數(shù)的功能需不需要從外面?zhèn)髦担绻枰獋髦敌枰獛讉€(gè))
4) 實(shí)現(xiàn)函數(shù)的功能
5) 確定返回值
J鳌A逶凇!碍遍!注意:函數(shù)聲明的時(shí)候定铜,函數(shù)體不會(huì)執(zhí)行
4. 函數(shù)的調(diào)用
4.1 語法
函數(shù)名(實(shí)參列表)
4.2 說明
函數(shù)名 -- 已經(jīng)聲明過的函數(shù)
() -- 固定寫法
實(shí)參列表 -- 用實(shí)參給形參賦值 數(shù)據(jù)值1,數(shù)據(jù)2怕敬,數(shù)據(jù)3揣炕,....
4.3 函數(shù)的調(diào)用過程
1)先回到函數(shù)聲明的位置
2)用實(shí)參給形參賦值(傳參,要保證每個(gè)形參都有值)
3)執(zhí)行函數(shù)體
4)獲取返回值
5)回到函數(shù)調(diào)用的位置
函數(shù)的參數(shù)一共有四種:位置參數(shù)东跪、關(guān)鍵字參數(shù)畸陡、默認(rèn)值參數(shù)鹰溜、不定長(zhǎng)參數(shù)
1.位置參數(shù)和關(guān)鍵值參數(shù)
調(diào)用函數(shù)的時(shí)候根據(jù)實(shí)參的寫法分為位置參數(shù)和關(guān)鍵字參數(shù)
位置參數(shù):讓實(shí)參的順序和形參一一對(duì)應(yīng),中間用逗號(hào)隔開
關(guān)鍵字參數(shù):通過以'形參名1 = 值1', '形參名2 = 值2'...來確定實(shí)參
注意:如果既有位置參數(shù)又有關(guān)鍵字參數(shù)丁恭,位置參數(shù)必須寫在關(guān)鍵字參數(shù)前面
2.參數(shù)默認(rèn)值
聲明函數(shù)的時(shí)候可以給形參賦默認(rèn)值曹动。有默認(rèn)值的形參,可以不用給形參賦值
注意:聲明的時(shí)候有默認(rèn)值的參數(shù)要放在沒有默認(rèn)值的參數(shù)后面牲览,默認(rèn)值還可以說明類型
3.參數(shù)的類型說明
python中類型只有說明的作用墓陈,沒有約束的作用
1)參數(shù)賦默認(rèn)值
2)參數(shù)名:類型
def func2(a: int, b= 10)
4.不定長(zhǎng)參數(shù) -- 形參的參數(shù)不確定
4.1. 聲明函數(shù)的時(shí)候在形參前面加一個(gè)星號(hào),那么這個(gè)參數(shù)就變成不定長(zhǎng)參數(shù)第献,可以同時(shí)接收多個(gè)位置實(shí)參(將這個(gè)參數(shù)變成元組)
注意:不帶號(hào)的參數(shù)要放在帶*號(hào)的前面 沒有默認(rèn)值的要放在有默認(rèn)值的前面
4.2. 聲明函數(shù)的時(shí)候贡必,在形參的前面加**,那么這個(gè)參數(shù)也會(huì)變成不定長(zhǎng)參數(shù), 可以同時(shí)接收多個(gè)關(guān)鍵字實(shí)參(將這個(gè)參數(shù)變成字典)
返回值
1. 什么是函數(shù)的返回值
返回值就是return關(guān)鍵字后面表達(dá)式的值庸毫,就是函數(shù)調(diào)用表達(dá)式的值
1.1 說明
return -- 函數(shù)體中的一個(gè)關(guān)鍵字仔拟,只能在函數(shù)中出現(xiàn)
1.2 作用
執(zhí)行函數(shù)體的時(shí)候結(jié)束函數(shù),確定函數(shù)的返回值
函數(shù)調(diào)用過程:執(zhí)行函數(shù)體飒赃,獲取返回值
1.回到函數(shù)聲明的位置
2.傳參
3.執(zhí)行完函數(shù)體
4.執(zhí)行完函數(shù)體理逊,確定函數(shù)返回值
執(zhí)行完函數(shù)體:函數(shù)體執(zhí)行完,執(zhí)行過程遇到return
確定函數(shù)返回值:看執(zhí)行函數(shù)的過程中有沒有遇到return盒揉,后面的表達(dá)式的值就是函數(shù)的返回值
如果沒有遇到return函數(shù)的返回值就是None
5.回到函數(shù)調(diào)用的位置,接著往后執(zhí)行(這個(gè)時(shí)候函數(shù)調(diào)用表達(dá)式的值)
2.什么時(shí)候需要返回值(初學(xué)者)
指導(dǎo)思想:如果實(shí)現(xiàn)函數(shù)的功能會(huì)產(chǎn)生新的數(shù)據(jù)兑徘,就可以把數(shù)據(jù)作為返回值刚盈。
return 返回值1,返回值2,....(可以返回多個(gè)值挂脑,實(shí)質(zhì)是返回元組)
return可以把數(shù)據(jù)進(jìn)行存儲(chǔ)等操作藕漱,print只能在控制臺(tái)看
匿名函數(shù)
1.什么是匿名函數(shù)
匿名函數(shù)就是沒有名字的函數(shù)
- 語法:
lambda 參數(shù)列表: 返回值
2)說明
lambda - 關(guān)鍵字
參數(shù)列表 -- 相當(dāng)于普通函數(shù)的形參列表,變量1崭闲,變量2肋联,.....至少一個(gè)參數(shù)
: -- 固定寫法,不會(huì)產(chǎn)生縮進(jìn)
返回值 -- 相當(dāng)于普通函數(shù)體中的return語句刁俭。 不能是賦值語句橄仍,可以是其他任何語句
注意:匿名函數(shù)本質(zhì)也是函數(shù) 之前函數(shù)中的語法絕大多數(shù)也適用
(通過:類型名對(duì)參數(shù)進(jìn)行說明不支持,其他的都支持)
匿名函數(shù)能做的事情牍戚,普通函數(shù)也能做侮繁,知識(shí)匿名函數(shù)簡(jiǎn)潔
變量的作用域
1. 變量的作用域
變量的作用域就是變量的使用范圍:
2. 全局變量、局部變量
1)全局變量:沒有聲明在函數(shù)/類中的變量就是全局變量如孝,全局變量的作用域從變量聲明開始到整個(gè)py文件結(jié)束
2)局部變量:聲明在函數(shù)/類中的變量就是局部變量宪哩,作用域是從變量聲明到函數(shù)結(jié)束(形參也是局部變量)
當(dāng)在調(diào)用函數(shù)/類, 系統(tǒng)會(huì)自動(dòng)在內(nèi)存的棧區(qū)間為這個(gè)函數(shù)開辟一個(gè)獨(dú)立的內(nèi)存區(qū)域,用來保存在函數(shù)內(nèi)聲明的變量或者產(chǎn)生的數(shù)據(jù)
當(dāng)函數(shù)調(diào)用結(jié)束后第晰,這塊內(nèi)存區(qū)域會(huì)自動(dòng)銷毀
3. global 和 nonlocal
global -- 在函數(shù)中聲明一個(gè)全局變量(只能在函數(shù)里面使用)
nonlocal -- 想要在局部的局部取修改一個(gè)局部變量的值锁孟,使用nonlocal
x1 = 100 # 可以在外面沒有