- 什么是函數(shù)
函數(shù)就是對實現(xiàn)某一特定功能的代碼段的封裝
2 函數(shù)的分類:
2.1 內(nèi)置函數(shù)呜叫,python已經(jīng)實現(xiàn)的函數(shù),可以直接調(diào)用
2.2 自定義函數(shù)殿衰,程序員自己定義用來實現(xiàn)某種功能的函數(shù)
3.函數(shù)的語法:
def 函數(shù)名 (參數(shù)列表):
函數(shù)體
說明:
def 聲明函數(shù)的關(guān)鍵字朱庆,固定寫法
函數(shù)名 - -要求:標識符、不能是關(guān)鍵字
規(guī)范:見名知意闷祥,所有字母小寫娱颊,多個單詞用下劃線—隔開,不能和系統(tǒng)內(nèi)置函數(shù)重名凯砍,否則會實現(xiàn)函數(shù)功能覆蓋
() - 固定寫法
參數(shù)列表--形參1箱硕,形參2.。悟衩。剧罩。形參n ,其實質(zhì)是變量名座泳,可以一個或者多個或者沒有
: - 固定寫法
函數(shù)體 - 必須和def保持一個縮進的代碼段
函數(shù)體分為函數(shù)說明文檔和實現(xiàn)函數(shù)功能的代碼段兩個部分
初學者聲明函數(shù)的步驟:
1 先確定函數(shù)的功能
2 根據(jù)功能確定函數(shù)名
3 確定參數(shù)惠昔,以及需要幾個參數(shù)
4 實現(xiàn)函數(shù)的功能
5 確定函數(shù)的返回值
特別注意的是,函數(shù)體在函數(shù)聲明的時候不會執(zhí)行挑势,調(diào)用函數(shù)的時候才會執(zhí)行函數(shù)體
函數(shù)的調(diào)用語法:
函數(shù)名(參數(shù)列表/實參列表)----函數(shù)名對應(yīng)的函數(shù)行必須是已經(jīng)聲明過的函數(shù)
實參列表 --這兒的參數(shù)叫實參镇防,實參是用來給形參賦值的,對應(yīng)幾個形參值就需要幾個實參值
例如 :寫一個函數(shù)潮饱。功能是計算兩個數(shù)的和来氧;
def sum1(num1,num2):
print(num1+num2)
sum1(1,2)
寫一個函數(shù)功能是求123...N的積
def factorial(n):
factorial 階乘的意思
sum2 = 1
for num in range(1,n+1):
sum2 *= num
print(sum1)
factorial(5) # 結(jié)果就是120
函數(shù)調(diào)用過程:
函數(shù)在聲明的時候不會執(zhí)行函數(shù)體調(diào)用函數(shù)的時候才會執(zhí)行函數(shù)體
函數(shù)的調(diào)用過程:
1.先回到函數(shù)聲明的位置
2 用實參給形參賦值(傳遞參數(shù))
3 執(zhí)行函數(shù)體
4 執(zhí)行完函數(shù)體再回到函數(shù)調(diào)用的位置,接著往后執(zhí)行
例如:
def sum1(num1,num2):
num1,num2 = 1,2
print(num1,num2) # print(3)
sum1(1,2)
函數(shù)的參數(shù)
根據(jù)實參寫法,將參數(shù)分為位置參數(shù)和關(guān)鍵字參數(shù)
位置參數(shù):調(diào)用函數(shù)的時候參數(shù)的位置要一一對應(yīng)啦扬,保證每個參數(shù)都有值
關(guān)鍵字參數(shù):以形參1=值1中狂,形參2=值2 。考传。吃型。的方式來調(diào)用函數(shù),特別地僚楞,形參的順科可以和聲明的時候的形參的順序不同
例如:
def func1(a,b,c):
print(a,b,c)
位置參數(shù)
func1(1,2,2)
關(guān)鍵字參數(shù)
func1(a=1,b=2,c=2) # 這里a,b,c,可以打亂順序
混用寫法
func1(5勤晚,b=2,c=2) # 調(diào)用函數(shù)的時候,位置參數(shù)必須在關(guān)鍵字參數(shù)前面泉褐,否則會報錯
參數(shù)默認值
聲明函數(shù)的時候函數(shù)的形參可以設(shè)置默認值
參數(shù)默認值
聲明函數(shù)的時候函數(shù)的形參可以設(shè)置默認值.
注意:如果設(shè)置默認值的時候赐写,是一部分有默認值,一部分沒默認值膜赃,那么沒有默認值的參數(shù)
a 一定要寫在有默認值得參數(shù)的前面
b 有默認值的參數(shù)挺邀,調(diào)用的時候可以不傳參數(shù),沒有默認值的參數(shù)跳座,調(diào)用的時候必須傳參
c .當我們傳參的時候想要跳過某個或者某幾個有默認值的參數(shù)端铛,直接給后面的參數(shù)傳參的時候,
后面的參數(shù)必須使用關(guān)鍵字傳參
def func2(a,b=20,c=30):
print(a,b,c)
func2(100,200,30)
func2(100)
func2(a= 100,c=20)
參數(shù)類型說明
給參數(shù)設(shè)置默認值疲眷,默認是什么類型禾蚕,參數(shù)就是什么類型
以參數(shù)名:類型名的方式說明參數(shù)類型
def func3(nums:list,a,b):
print(a+b)
func3([],10,0)
練習:寫一個函數(shù),函數(shù)的功能是統(tǒng)計一個列表中指定元素的個數(shù)(類似count()方法的功能)
print('-----------')
def count1(a:list,b):
count1= 0
for i in a:
if i == b:
count1 +=1
print(count1)
count1([1,2,3],1)
不定長參數(shù)
在聲明函數(shù)的時候狂丝,在形參前加一個*,可以將這個形參變成元祖换淆,然后同時接受多個位置實參的值
原則上一個函數(shù)的參數(shù)中既可以有定長的,也可以有一個的不定長和兩個*的不定長几颜;
如果同時存帶一個參數(shù)和帶兩個*的參數(shù)倍试,帶一個的要放在帶兩個的前面
def f(a,*b):
print(a,b)
f(1,2,3,c=1,d=2)
def f(*num):
print(num)
f(12,230,90)
聲明函數(shù)的時候,在形參前加**,可以將這個形參變成字典蛋哭,然后可以同時接受多個關(guān)鍵字的值(關(guān)鍵字隨意命名)
def f(**num):
print(num)
f(a=12, b=230, c=90)
def yh_sum1(*num):
print(num)
yh_sum1(1)
yh_sum1(1,2)
注意:一個函數(shù)中可以同時又不定長參數(shù)和定長參數(shù)县习,一般情況下不定長參數(shù)要放在后面
如果出現(xiàn)定長參數(shù)放在不定長參數(shù)的后面,那么在不定長參數(shù)后面的定長參數(shù)調(diào)用的時候需要使用關(guān)鍵字參數(shù)傳參
def func1(a,*nums):
print(a,nums)
func1(1) #
func1(1,2) #
寫一個函數(shù)求多個數(shù)的和具壮,要求調(diào)用函數(shù)的時候既可以使用位置參數(shù)准颓,也可以使用關(guān)鍵字參數(shù)傳參
def sum1(num1,*num2):
sum2=0
for i in num1:
sum2 += int(i)
sum3=0
for key in num2:
sum3 += num2[key]
sum1= sum2 +sum3
print(sum1)
sum1(1,2)
sum1(1,2,num3=2,num4 = 3)
sum1(1,2,3,num = 100,)