函數(shù)
1.什么是函數(shù)
函數(shù)就是對實現(xiàn)某一特定功能的代碼段的封裝
2.函數(shù)的分類
內(nèi)置函數(shù)(系統(tǒng)函數(shù)) :Python已經(jīng)實現(xiàn)的函數(shù),程序員可直接使用冯挎,如print(),input(),max(),len()等。相當于系統(tǒng)造好的機器
自定義函數(shù) :程序員自己定義的函數(shù)沙郭,相當于自己造機器渐行。
3.函數(shù)的定義(聲明)
語法:
def 函數(shù)名(參數(shù)列表):
? 函數(shù)體
說明:
def :聲明函數(shù)關鍵字,固定寫法
函數(shù)名:要求--標識符冀宴,不能是關鍵字
? 規(guī)范--見名知義,所有字母都小寫温学,各個單詞之間用下劃線分開略贮,不能和系統(tǒng)函數(shù)名或類名重名
():固定寫法,不能省略
參數(shù)列表:形參1,形參2逃延,...览妖,形參n;形參可以沒有揽祥,也可以有多個讽膏。形參的功能是將函數(shù)外面的數(shù)據(jù)傳到函數(shù)內(nèi)部
:--固定寫法
函數(shù)體:和def保持一個縮進的代碼段;函數(shù)體分為函數(shù)說明文檔和實現(xiàn)函數(shù)功能的代碼段兩個部分
注意 :函數(shù)體在函數(shù)聲明時不會執(zhí)行拄丰,調(diào)用函數(shù)時才會執(zhí)行府树。
初學者聲明函數(shù)的步驟
第一步:確定函數(shù)的功能
第二部:根據(jù)功能確定函數(shù)的名字
第三步:確定參數(shù)(是否需要參數(shù),需要幾個參數(shù))
? 看實現(xiàn)函數(shù)的功能需不需要從函數(shù)外面給函數(shù)傳值料按,如果需要奄侠,需要幾個
第四部:實現(xiàn)函數(shù)的功能
第五步:確定返回值
def zy_sum(num1,num2):
"""
函數(shù)說明文檔
"""
print(num1 + num2)
def zy_mul(n):
"""
求1*2*3*...*n
"""
mul = 1
for num in range(1,n + 1):
mul *= num
print(mul)
4.函數(shù)的調(diào)用
相當于使用機器
語法:
函數(shù)名(參數(shù)列表)
說明:
函數(shù)名:函數(shù)名對應的函數(shù)必須是之前已經(jīng)聲明過的函數(shù)。
():固定寫法
參數(shù)列表:即實參载矿,用來給形參賦值垄潮,和形參一一對應。
函數(shù)的調(diào)用過程
函數(shù)在聲明時不會執(zhí)行函數(shù)體闷盔,調(diào)用時才會執(zhí)行弯洗。
- 先回到函數(shù)聲明的位置
- 用實參給形參賦值(傳參)--傳參要保證每個形參都有值
- 執(zhí)行函數(shù)體
- 執(zhí)行完函數(shù)體后再回到函數(shù)調(diào)用的位置,接著往后執(zhí)行
函數(shù)的參數(shù)
根據(jù)實參的寫法馁筐,將參數(shù)分為位置參數(shù)和關鍵字參數(shù)
- 位置參數(shù):調(diào)用函數(shù)傳參時涂召,實參的位置和形參一一對應,保證每個形參都有值敏沉。
- 關鍵字參數(shù):以“形參名=值”的方式來調(diào)用函數(shù)果正,在這兒形參的順序可以和聲明的時候形參的順序不同。
- 混合使用:位置參數(shù)可以和關鍵字參數(shù)混合使用盟迟,但混合使用時秋泳,位置參數(shù)必須在關鍵字參數(shù)前面,否則報錯
def func1(a,b,c):
print(a,b,c)
func1(10,20,30) #位置參數(shù)
func1(c=10,b=20,a=9) #關鍵字參數(shù)攒菠,等號前面變量必須和聲明時的形參一致
func1(10,c=9,b=1) #混合使用迫皱,10的值賦給a,后面不可再用關鍵字參數(shù)賦給a值了
參數(shù)默認值
聲明函數(shù)時辖众,函數(shù)的形參可以設置默認值卓起。
- 設置默認值時,可以一部分有默認值凹炸,一部分沒有默認值戏阅,但沒有默認值的一定要在有默認值的前面,否則報錯啤它。
- 有默認值得參數(shù)奕筐,調(diào)用時可以不用傳參舱痘,沒有默認值的時候調(diào)用時必須傳參
- 當我們傳參想跳過某個或某幾個有默認值的參數(shù),直接給后面的參數(shù)傳參時离赫,后面的參數(shù)必須使用關鍵字傳參
def func2(a,b=2,c=3):
print(a,b,c)
func2(10,20,30) #10 20 30
func(10,20) #10 20 3
func2(10) # 10 2 3
func(10,c=20) #10 2 20,要跳過b賦值芭逝,這里就必須要用關鍵字參數(shù)
參數(shù)類型說明
- 給參數(shù)設置默認值,默認是什么類型渊胸,參數(shù)就是什么類型
- 以‘參數(shù)名:類型名’的方式說明參數(shù)類型
def func3(nums:list,a:int,b=0):
不定長參數(shù)
- 聲明函數(shù)時旬盯,在形參前面加一個*,可以將這個形參變?yōu)樵骖愋汪崦停梢酝瑫r接收多個位置參數(shù)的值
- 一個函數(shù)中可以同時有定長參數(shù)和不定長參數(shù)瓢捉,一般情況下,定長參數(shù)要在不定長參數(shù)前面
- 如果出現(xiàn)定長參數(shù)在不定長參數(shù)后面(比如办成,賦默認值),那么調(diào)用時搂漠,定長參數(shù)使用關鍵字參數(shù)傳參
def func2(*num): #傳參個數(shù)0-n
print()
def func2(a,b,*num): #傳參個數(shù)2-n
print()
def func2(a,*num,b=1):
print(a,num,b)
func2(1,2,3,4,5) #1 (2, 3, 4, 5) 1
func2(1,2,3,4,5,b=99) #1 (2, 3, 4, 5) 99
- 聲明函數(shù)時迂卢,在形參前面加**,可以將這個形參變?yōu)樽值漕愋屯┨溃梢酝瑫r接收多個關鍵字參數(shù)的值(這里關鍵字自己隨便命名而克,不要寫成字符串!怔毛!若前面還有定長參數(shù)员萍,關鍵字就不能是定產(chǎn)參數(shù)的名字)
def func3(a,**num):
print(a,num)
func3(10,d=1,b='2',c='c')
注意:
原則上一個函數(shù)的參數(shù)即可以有定長,也可以最多有一個帶一個*的不定長參數(shù)和最多一個的帶兩個*的不定長參數(shù)拣度。如果同時有帶一個*的和帶兩個*的碎绎,帶一個*的要放在前面。
各參數(shù)聲明順序:
def func5(a,*num,b=0,**key)
def func5(a,*num,b=0,**key):
print(a,b,num,key)
func5(1,2,3,b=11,d=1,c=2) #1 11 (2, 3) {'d': 1, 'c': 2}
func5(1,2,3,d=1,c=2) #1 0 (2, 3) {'d': 1, 'c': 2}
def func5(a,b=0,*num,**key):
print(a,b,num,key) #這里若要使num有值抗果,那么b不能關鍵字傳參筋帖,因為位置參數(shù)要在關鍵字之前,所以推薦上面的寫法
func5(10,20,30,40,n=1,m=2) #10 20 (30,40) {'n':1,'m':2},先傳給a冤馏,b日麸,剩下的給num,這里n逮光,m關鍵字不能是a代箭,b,也不能是字符串
func5(10,b=2,n=1,m=2) #10 2 () {'n': 1, 'm': 2}
func5(10,b=2,3,4,n=1,m=2) #報錯
5.函數(shù)返回值
1.什么是返回值
返回值的作用是將函數(shù)體中產(chǎn)生的數(shù)據(jù)傳遞到函數(shù)外面涕刚。
返回值就是函數(shù)調(diào)用表達式(就是調(diào)用函數(shù)的語句嗡综,它的結果就是這個函數(shù)的返回值)的值,就是return關鍵字后面的值副女。
2.return關鍵字
return只能出現(xiàn)在函數(shù)體內(nèi)蛤高,當執(zhí)行函數(shù)體的時候遇到return蚣旱,函數(shù)直接結束,并且會將return后面的值作為函數(shù)的返回值返回戴陡。
如果在執(zhí)行函數(shù)體的時候沒有遇到return塞绿,或return后沒有指定值,則函數(shù)的返回值是None(表示空恤批,class 'NoneType')
3.函數(shù)的調(diào)用過程(完整版)
- 先回到函數(shù)聲明的位置
- 用實參給形參賦值(傳參)
- 執(zhí)行函數(shù)體
- 執(zhí)行完函數(shù)體后异吻,確定返回值(執(zhí)行完函數(shù)體中所有語句沒有遇到return,函數(shù)的返回值是None喜庞,執(zhí)行過程中遇到return诀浪,函數(shù)的返回值就是return后面的值,若沒有值延都,則返回值為None
- 回到函數(shù)調(diào)用的位置雷猪,接著往后執(zhí)行(此時函數(shù)調(diào)用表達式的值才是函數(shù)的返回值)
4.什么時候函數(shù)需要有返回值
給初學者的建議:只要實現(xiàn)函數(shù)的功能產(chǎn)生了新的數(shù)據(jù),就可以把數(shù)據(jù)用返回值返回
Python中晰房,函數(shù)返回值可以有多個值求摇,實質是元祖(return后多個值,用逗號隔開)
def func1():
return 10,20
x,y = func1()
print(x,y) #10 20
x = func1()
print(x) #(10,20)