一微驶、函數
1浪谴、什么是函數
函數就是對實現某一特定功能的代碼段的封裝开睡。
2因苹、函數的分類
- 系統(tǒng)函數:系統(tǒng)已經給我們定義好的函數,程序員直接調用函數使用函數的功能篇恒。
- 自定義函數:需要程序員自己去定義的函數扶檐。
3、函數的定義
a胁艰、語法
def 函數名(參數列表):
函數體
b款筑、說明
def - Python中聲明函數的關鍵字
函數名 - 標識符,不能是關鍵字腾么;PEP8命名規(guī)范奈梳,見名知意。
() - 固定格式
參數列表 - 參數1解虱,參數2攘须,參數3……;這里的參數叫形參殴泰。
? 功能是將函數外面的數據傳遞到函數里面
: - 固定格式
函數體 - 實現功能的代碼段于宙。一個完整的函數體包含:函數說明文檔浮驳、實現函數功能的代碼段、函數的返回值捞魁。
c至会、初學著聲明函數的步驟
- 確定函數的功能
- 根據功能給函數命名
- 確定形參(看實現函數的功能需不需要外面?zhèn)髦到鼇恚?/li>
- 實現函數功能
- 確定函數返回值
注意:函數的在聲明的時候不會執(zhí)行函數體。只有在調用的時候才會執(zhí)行谱俭。
def my_sum(num1, num2):
"""
求兩個數的和奉件。
:param num1:
:param num2:
:return:
"""
print(num1 + num2)
4、函數的調用
就是使用函數旺上。
a瓶蚂、語法
函數名(實參列表)
b、說明
函數名 - 這個函數名對應的函數必須是已經聲明過的函數
() - 固定寫法
實參列表 - 實參是用來給新參賦值(用實參給形參賦值的過程就是傳參)
? 實參和新參要一一對應宣吱。
c窃这、調用過程
- 回到函數聲明的位置
- 用實參給形參賦值(傳參)
- 執(zhí)行函數體
- 執(zhí)行完函數體就確定并返回返回值
- 再回到函數調用位置,接著執(zhí)行后面其他代碼
練習:N的階乘
def factorial (num1):
"""
打印N的階乘
:param num1:
:return:
"""
result = 1
while num1:
result *= num1
num1 -= 1
print(result)
二征候、參數
1杭攻、位置參數和關鍵字參數
根據實參的傳遞方式對參數進行的分類
a、位置參數:
實參的位置和形參保持一致疤坝,按形參聲明的先后順序一一賦值兆解。
b、關鍵字參數:
調用函數的時候以 形參=實參的方式來傳參跑揉,這個時候實參的順序無所謂
def func1(a, b, c):
print(a, b, c)
# 通過位置參數給新參賦值
func1(10, 20, 30)
def func2(a, b, c):
print(a, b, c)
# 通過關鍵字參數給新參賦值
func2(c = 10, a = 20, b =30)
# 通過位置參數和關鍵字參數結合傳參(注意關鍵字參數必須在位置參數的后面)
func2(10, 20, c =30)
2锅睛、參數默認值
聲明函數的時候,可以給參數賦默認值历谍。
如果一個形參有默認值了现拒,那么調用函數的時候這個參數就可以不用傳參。
有默認值的形參要放在沒有默認值的后面望侈。
調用函數要保證每個參數都有值印蔬!
def fun2(a, b c=0):
print(a, b, c)
fun2(1, 2, 3)
fun2(1, 2)
fun2(b = 2, a = 1)
3、參數類型說明
類型說明只有提示功能脱衙,沒有約束功能侥猬。
a、給參數設置默認值捐韩,默認值的類型就是參數的類型退唠。
b在形參后面加:類型命,來說明參數類型荤胁。這個方式調用的時候必須傳參瞧预。
c、函數聲明的時候在() 后面加 ->類型名,來說明函數返回值的類型松蒜。
def list_item(list1: list, index = 0):
print(list1[index])
類型說明的好處:
- 傳參時候扔茅,對實參的類型進行說明。
- 實現函數功能的時候有類型相關的語法提示
def list_item(list1: list, index = 0) ->int:
return list1[index]
4秸苗、不定長參數
函數的參數不確定召娜。
寫一個函數,計算多個函數的和
方法一:聲明函數的時候惊楼,在參數名前加*玖瘸,可以用來同時獲取多個實參的值。實質是將帶*的參數變成元祖檀咙,將多個實參的值作為元祖的元素雅倒。
注意:如果函數中既有不定長參數又有普通參數,那么不定長參數必須放在普通參數的后邊弧可。
def my_sum(*nums):
print(nums)
print(type(nums))
my_sum(1, 2, 3, 4, 5, 6)
def my_sum(*nums):
print(sum(nums))
方法二:在參數名前加兩個*
傳參時需使用關鍵字傳參蔑匣,會將參數變成一個字典來獲取關鍵字參數的值,其他關鍵字作為key,實參作為value
def my_sum(**nums):
print(nums)
print(type(nums))
my_sum(a = 1)
# {'a': 1}
# <class 'dict'>
def my_sum2(**nums):
total = 0
for key in nums:
total += nums[key]
print(total)
注意:
如果函數中既有不定長參數又有普通參數棕诵,那么不定長參數必須放在普通參數后邊裁良。
兩個*的參數要放在一個*的后面
def fun1(*args, **kwargs):
print(args, kwargs)
fun1(10, 3, 4)
fun1(a= 10, b = 3, c = 2)
fun1(90, 23, z = 3, y = 3)
"""
(10, 3, 4) {}
() {'a': 10, 'b': 3, 'c': 2}
(90, 23) {'z': 3, 'y': 3}
"""
三、返回值
1校套、什么是返回值
a价脾、返回值就是函數調用表達式的值,就是return關鍵字后面的表達式的值笛匙。返回值就是將函數里面的數據傳遞到函數外面侨把。
b、Python中每個函數都有返回值妹孙,默認是None秋柄,如果遇到return ,return 后面是什么返回值就是什么涕蜂。
函數調用表達式 - 調用函數的語句
return - 關鍵字华匾,只能寫在函數體中映琳。
return功能:
- 確定函數的返回值
- 結束函數机隙,執(zhí)行時遇到return,函數直接結束萨西,并且將return后面的值作為函數的返回值有鹿。
def func1():
print('***')
result = func1()
print(resut) # None
2、多個返回值
return 值1, 值2, 值3... 相當于返回一個元祖
def fun3():
return 1, 2, 3
fun3()
print(type(fun3()))
3谎脯、怎么確定函數是否需要返回值
函數執(zhí)行完成后是否產生新的數據葱跋,如果產生新的數據就將這個數據用return返回。