函數(shù)
-
什么是函數(shù)
函數(shù)就是對(duì)實(shí)現(xiàn)某一特定功能的代碼段的封裝
-
函數(shù)的分類(lèi)
系統(tǒng)函數(shù):系統(tǒng)已經(jīng)封裝好秀又,直接調(diào)用使用
自定義函數(shù):需要自己去定義
-
函數(shù)的定義/聲明
-
語(yǔ)法:
def 函數(shù)名(參數(shù)列表):
? 函數(shù)體
-
說(shuō)明:
def - python中聲明函數(shù)的關(guān)鍵字
函數(shù)名 - 標(biāo)識(shí)符涤妒,不能是關(guān)鍵字
? PEP8命名規(guī)范,見(jiàn)名知意
() - 固定格式
參數(shù)列表 - 參數(shù)1账劲,參數(shù)2,參數(shù)3...;這兒的參數(shù)叫形參
? 定義的時(shí)候形參就是變量
? 功能是將函數(shù)外面的數(shù)據(jù)傳遞到函數(shù)里
: - 固定格式
函數(shù)體 - 一個(gè)完整的函數(shù)體包含:函數(shù)說(shuō)明文檔,實(shí)現(xiàn)功能的代碼段 -
初學(xué)者聲明函數(shù)的步驟(老司機(jī)繞行)
第一步:確定函數(shù)功能
第二步:根據(jù)函數(shù)功能確定函數(shù)名
第三步:確定形參(是否需要參數(shù),確定需要幾個(gè)參數(shù))
看實(shí)現(xiàn)函數(shù)的功能需不需要從外邊傳值,以及需要傳幾個(gè)
第四步:實(shí)現(xiàn)函數(shù)功能
第五步:確定函數(shù)返回值注意:聲明函數(shù)的時(shí)候不會(huì)執(zhí)行函數(shù)體雹熬!只有在調(diào)用的時(shí)候才會(huì)中
-
-
函數(shù)的調(diào)用
-
語(yǔ)法
函數(shù)名(實(shí)參列表)
說(shuō)明
函數(shù)名 - 這個(gè)函數(shù)名對(duì)應(yīng)的函數(shù)必須是已經(jīng)聲明過(guò)的函數(shù)
() - 固定寫(xiě)法
實(shí)參列表 - 實(shí)參是用來(lái)給形參賦值的 - 傳參
? 實(shí)參和形參必須一一對(duì)應(yīng)-
調(diào)用過(guò)程(重點(diǎn))
第一步:回到函數(shù)聲明的位置
第二步:實(shí)參賦值給形參(傳參)
第三步:執(zhí)行函數(shù)體
第四步:確定并返回返回值
第五步:回到函數(shù)調(diào)用的位置,接著執(zhí)行后面的代碼# 練習(xí) 聲明一個(gè)函數(shù)谣膳,獲取并打印一個(gè)列表中指定元素對(duì)應(yīng)的下標(biāo) list1 = [1, 2, 3, 4, 5, 6, 1, 2, 3, 4] def inquire_index(list1: list, num1): for index in range(len(list1)): if list1[index] == num1: print(index) inquire_index(list1, 2) # 打印N的階乘 def factorial_n(num): rpp = 1 for i in range(1,num+1): rpp *= i print(rpp) factorial_n(10)
-
函數(shù)中的參數(shù)
- 位置參數(shù)和關(guān)鍵字參數(shù)(根據(jù)實(shí)參的傳遞方式對(duì)參數(shù)進(jìn)行的分類(lèi))
- 位置參數(shù):實(shí)參的位置和形參的位置保持一致竿报,按形參聲明的先后順序一一賦值
- 關(guān)鍵字參數(shù):調(diào)用函數(shù)的時(shí)候以 形參 = 實(shí)參的方式來(lái)傳參,這時(shí)候?qū)崊⒌捻樞驘o(wú)所謂
def func1(a, b, c):
print(a, b, c)
# 通過(guò)位置參數(shù)給形參賦值
func1(10,20,30)
# 通過(guò)關(guān)鍵字參數(shù)傳參
func1(c=30, a=10, b=20)
# 通過(guò)位置參數(shù)和關(guān)鍵字參數(shù)結(jié)合傳參(注意:位置參數(shù)在前面继谚,關(guān)鍵字參數(shù)在后面)
func1(10, 20, c=30)
-
參數(shù)默認(rèn)值
聲明函數(shù)的時(shí)候烈菌,可以給參數(shù)賦默認(rèn)值。如果一個(gè)形參有默認(rèn)值,那么調(diào)用函數(shù)的時(shí)候芽世,這個(gè)參數(shù)就可以不用傳參了
如果有的形參有默認(rèn)值挚赊,有的形參沒(méi)有默認(rèn)值,那么有默認(rèn)值的形參要放在沒(méi)有默認(rèn)值形參的后面济瓢。調(diào)用參數(shù)要保證每個(gè)參數(shù)都有值# 參數(shù)c有默認(rèn)值是荠割,調(diào)用函數(shù)可以不用傳參 def func3(width=5, color='black', long=10): print('畫(huà)一條長(zhǎng)度是%d寬度是%d的%s線' % (long, width, color)) func3() func3(color='red')
-
參數(shù)的類(lèi)型說(shuō)明 -- 類(lèi)型說(shuō)明只有提示的功能沒(méi)有約束功能
給參數(shù)設(shè)置默認(rèn)值,默認(rèn)值的類(lèi)型就是參數(shù)的類(lèi)型
形參:類(lèi)型名 在形參后面加:類(lèi)型名(list,dict,tuple,set)旺矾。這種方式必須傳參
函數(shù)聲明的()后面加 -> 類(lèi)型名,來(lái)說(shuō)明返回值的類(lèi)型
-
類(lèi)型說(shuō)明的好處: a.對(duì)實(shí)參的類(lèi)型進(jìn)行說(shuō)明指導(dǎo)
? b.實(shí)現(xiàn)函數(shù)功能的時(shí)候有類(lèi)型相關(guān)的語(yǔ)法提示def list_item(list1, index=0) -> int: print(list1[index]) return 10 list_item([1,2,3]) def func4(a: list, b: dict): a.append()
-
不定長(zhǎng)參數(shù) -- 函數(shù)參數(shù)個(gè)數(shù)不確定
-
聲明函數(shù)的時(shí)候在形參名前加蔑鹦,可以用來(lái)同時(shí)獲取多個(gè)實(shí)參的值 -- 實(shí)質(zhì)是將帶的參數(shù)變成元組,將多個(gè)實(shí)參的值作為元組的元素
注意:a.如果函數(shù)中既有不定長(zhǎng)參數(shù)箕宙,又有普通參數(shù)嚎朽,那么不定長(zhǎng)參數(shù)必須放在普通參數(shù)的后面
? b.兩個(gè)的參數(shù)要放在一個(gè)的后面# 計(jì)算多個(gè)數(shù)的和 def num_sum(*nums): print(nums) def func5(name, *scores): print(name, scores) func5('郭銳', 90,20,53) num_sum(10, 20, 30) num_sum(20, 30, 40, 50)
-
在形參前加兩個(gè)* -- 必須用關(guān)鍵字參數(shù),對(duì)應(yīng)的關(guān)鍵字作為key柬帕,而值作為value哟忍,從而形成一個(gè)字典
def func6(**nums): print(nums) func6(a=10, b=20) func6() # 寫(xiě)一個(gè)函數(shù),計(jì)算多個(gè)數(shù)的和(要求可以使用位置參數(shù)陷寝,也可以使用關(guān)鍵字參數(shù)) def all_num_sum(*args, **kwargs): sum1 = 0 for item in args: sum1 += item for key in kwargs: sum1 += kwargs[key] print('和為%d' % sum1) all_num_sum(10, 20, a=30, b=40)
-
函數(shù)中的返回值
-
什么是返回值 - 返回值就是將函數(shù)里面的數(shù)據(jù)傳遞到函數(shù)外面
就是函數(shù)調(diào)用表達(dá)式的值锅很,就是return 關(guān)鍵字后面的表達(dá)式的值
-
python中每個(gè)函數(shù)都有返回值,默認(rèn)為None
? 函數(shù)調(diào)用表達(dá)式 - 調(diào)用函數(shù)的語(yǔ)句
return - 關(guān)鍵字凤跑,只能寫(xiě)在函數(shù)體中爆安。 功能:1:確定函數(shù)的返回值 2.結(jié)束函數(shù)
? 執(zhí)行函數(shù)的時(shí)候,如果遇到return饶火,函數(shù)直接結(jié)束鹏控,并且將return后面的值作為返回值
回到函數(shù)調(diào)用的位置(這個(gè)時(shí)候函數(shù)對(duì)奧用的表達(dá)式的值就是函數(shù)的返回值)函數(shù)調(diào)用過(guò)程
回到函數(shù)聲明位置
傳參 - (保證每個(gè)參數(shù)都有值)
執(zhí)行函數(shù)體
執(zhí)行完函數(shù)確定返回值 -- 如果執(zhí)行過(guò)程中沒(méi)有遇到return致扯,函數(shù)的返回值為None
? 遇到return肤寝,return后面是什么,返回值就是什么
def func1(): print('*******') return 0 print('=======') result = func1() #func1()就是函數(shù)調(diào)用表達(dá)式 print(result) def func2(): print(100) print(func2()) # 先打印100抖僵,然后打印None 鲤看,先執(zhí)行函數(shù),再打印返回值
-
多個(gè)返回值
return 值1耍群,值2义桂,值3 <==> (值1,值2蹈垢,值3.···)def func3(): return 1,2,3 x,y,z = func3() print(x,y,z)