一、認識函數(shù)
01缸濒、同樣的功能足丢,相同的代碼需要重復寫很多次
02粱腻、當功能發(fā)生改變了,需要修改多處代碼
1斩跌、函數(shù)的定義
a.函數(shù)就是對實現(xiàn)某一特定代碼段的封裝
b.分類
函數(shù)可以分為內(nèi)置函數(shù)和自定義函數(shù)
內(nèi)置函數(shù):python已經(jīng)聲明好了绍些,程序員直接調(diào)用的函數(shù)。相當于已經(jīng)造好的機器耀鸦,程序員只需要知道機器的功能和使用方法
自定義函數(shù):程序員自己聲明柬批,自己實現(xiàn)功能的函數(shù)⌒涠可以提供給別人用氮帐,也可以自己用。相當于自己設置和創(chuàng)建機器洛姑。
2上沐、函數(shù)的聲明
a.語法:
def 函數(shù)名(形參列表):
函數(shù)說明文檔
函數(shù)體
b.說明:
def - python中聲明函數(shù)的關鍵字
函數(shù)名 - 自己名明。要求:標識符楞艾,不能是關鍵字
PEP8参咙,名字中的字母小寫,多個單詞之間用下劃線隔開
見名知義(看到函數(shù)名硫眯,大概知道函數(shù)的功能)
() - 固定寫法
形參列表 - 形參1蕴侧,形參2,...(可以有一個參數(shù)两入,也可以有多個參數(shù)净宵,也可以沒有)
形參的作用:是從函數(shù)外部,向函數(shù)內(nèi)部傳遞數(shù)據(jù)
: - 固定寫法
函數(shù)說明文檔 - 用來對函數(shù)功能進行說明的注釋裹纳。這個注釋需要用3個雙引號引起來塘娶。
函數(shù)體 - 實現(xiàn)函數(shù)功能的代碼段。
c.初學者函數(shù)聲明的步驟
第一步:確定函數(shù)的功能
第二步:根據(jù)函數(shù)的功能痊夭,確定函數(shù)名
第三步:確定參數(shù),看實現(xiàn)函數(shù)的功能脏里,需不需要額外的數(shù)據(jù)她我。需要幾個數(shù)據(jù)就需要幾個參數(shù)。
第四步:實現(xiàn)函數(shù)的功能
第五步:確定返回值
3迫横、函數(shù)的調(diào)用
(重點)函數(shù)在聲明的時候,不會執(zhí)行函數(shù)體矾踱,只有在調(diào)用的時候才會執(zhí)行呛讲。
a.語法:
函數(shù)名(實參列表)
b.說明:
函數(shù)名 - 必須是已經(jīng)聲明過的函數(shù)
() - 固定寫法
實參列表 - 實參就是給形參賦值(需要傳輸給函數(shù)內(nèi)部的數(shù)據(jù))
目前,形參有多少個吗氏,實參就需要有多少個
二弦讽、函數(shù)的調(diào)用
函數(shù)在聲明的時候不會執(zhí)行往产,只有在調(diào)用的時候才會執(zhí)行函數(shù)體
1、函數(shù)調(diào)用的過程(重點H衿印)
a.物理過程
第一步:回到函數(shù)聲明的位置
第二步:用實參給形參賦值(傳參)傳參一定要保證每個形參都有值
第三步:執(zhí)行函數(shù)體
第四步:返回函數(shù)值
第五步:回到函數(shù)調(diào)用的位置包颁,接著往后執(zhí)行
b.函數(shù)的條用過程是一個壓棧過程
當函數(shù)調(diào)用的時候娩嚼,系統(tǒng)會自動在內(nèi)存中棧間開辟空間岳悟,儲存函數(shù)調(diào)用過程中產(chǎn)生的數(shù)據(jù)
(這的數(shù)據(jù)包括參數(shù)和在函數(shù)的聲明的變量)贵少。當函數(shù)調(diào)用完成后堆缘,對應的內(nèi)存空間會自動銷毀
三吼肥、函數(shù)的參數(shù)
1、根據(jù)實參分為位置參數(shù)和關鍵字參數(shù)
a.位置參數(shù)
實參的位置和形參的位置一一對應
b.關鍵字參數(shù)
實參以"形參-值"的形式來傳參
c.位置參數(shù)和關鍵字參數(shù)混合使用
前提:a.保證每個參數(shù)都有值斗这;b.位置參數(shù)一定要在關鍵字參數(shù)前面
2表箭、從函數(shù)聲明的角度又有:參數(shù)默認值免钻、不定長參數(shù)以及參數(shù)類型說明
a.參數(shù)的默認值
聲明函數(shù)的時候可以給參數(shù)設置默認值,語法:參數(shù)名 = 默認值
注意:設置默認值除了可以給參數(shù)一個默認的值猿涨,也可以對參數(shù)的類型進行說明
如果由的參數(shù)有默認值叛赚,有的參數(shù)沒有默認值俺附,有默認值的參數(shù)一定要放在沒有默認值參數(shù)的后面溪掀;
如果函數(shù)聲明的時候參數(shù)有默認值,調(diào)用函數(shù)的時候璃哟,有默認值的參數(shù)可以不用賦值随闪。
3骚勘、不定長參數(shù)
不定長參數(shù):聲明函數(shù)的時候,函數(shù)的參數(shù)不確定
01.在聲明函數(shù)的時候当宴,參數(shù)名的前面加一個*户矢,會將這個參數(shù)變成元組殉疼,來獲取多個實參的值(位置參數(shù)傳參)
調(diào)用參數(shù)是不定長參數(shù)的函數(shù)的時候株依,不定長參數(shù)對應的位置恋腕,可以傳任意個實參
02.在聲明函數(shù)的時候逆瑞,參數(shù)名的前面加兩個*,會將這個參數(shù)變成字典哈肖,來獲取多個實參的值(必須使用關鍵字參數(shù))
注意:如果是調(diào)用不定長參數(shù)(參數(shù)后面加了兩顆*)淤井,調(diào)用的時候關鍵字可以隨便命名
03.一顆*和兩顆*一起使用,用來表示不定長參數(shù)游两〖福可以用位置參數(shù)傳參宝踪,也可以用關鍵字參數(shù)碍扔,也可以兩個一起用。
要求:一顆*的參數(shù)要放在兩顆*參數(shù)的前面
4颤芬、參數(shù)類型說明
參數(shù)類型說明 - 只是對參數(shù)類型進行提示站蝠,不能限制參數(shù)類型
a.設置默認值
b.參數(shù)名:類型名
注意:類型說明除了說明類型意外菱魔,還可以做相應類型對應的語法提示澜倦。
對函數(shù)的返回值進行類型說明:
def 函數(shù)名(參數(shù)列表) -> 返回值類型:
四藻治、函數(shù)的返回值
1桩卵、返回值
a.函數(shù)的返回值就是return關鍵字后面表達式的值,就是函數(shù)調(diào)用表達式的值胜嗓。
b.python中國所有的函數(shù)都有返回值辞州,默認是None。
return - 關鍵字:返回返回值变过;結(jié)束函數(shù)(當在執(zhí)行函數(shù)體的時候牵啦,遇見return哈雏,直接結(jié)束函數(shù))。
如果函數(shù)體中沒有return裳瘪,函數(shù)會在函數(shù)體執(zhí)行完成后將None作為返回值彭羹。
函數(shù)調(diào)用表達式 - 調(diào)用函數(shù)的語句派殷;當函數(shù)調(diào)用完成后函數(shù)調(diào)用表達式的結(jié)果就是函數(shù)的返回值毡惜。
看一個函數(shù)的返回值斯撮,永遠只看是否遇到eturn勿锅,遇到了就是return后面的值溢十,遇不到就是None。
例子:def func5():
print("hello")
返回值為 None
返回值的作用:就是將在函數(shù)內(nèi)部產(chǎn)生的數(shù)據(jù)荒典,傳遞到函數(shù)的外部种蝶,防止在函數(shù)調(diào)用完成后被銷毀螃征。
什么時候使用返回值:如果實現(xiàn)函數(shù)的功能會產(chǎn)生新的數(shù)據(jù)盯滚,一般都會講這個數(shù)據(jù)返回魄藕。
2背率、同時返回多個值
python的函數(shù)支持返回多個值
return 返回值1寝姿,返回值2饵筑,返回值3....
五处坪、返回值的應用
返回值能做的事情玄帕,函數(shù)調(diào)用表達式都可以做
1、函數(shù)表達式給變量賦值
def func1():
return "hello"
str1 = "hello"
2塞椎、通過函數(shù)調(diào)用表達式桨仿,使用相應的方法
def func2():
return[1,2]
item = func2()[0]
3、將函數(shù)調(diào)用表達式作為容器的元素案狠、函數(shù)的參數(shù)服傍、函數(shù)的返回值
def func3():
return 100
作為值參加運算
print(func3+3)
作為列表元素
list2 = [func3(),"abc"]
作為字典的key和value
dict1 = {func3():func3()}
作為函數(shù)的返回值
def func4(m):
print(m)
func4(func3())
作為函數(shù)的實參
re =? func4(func3())
print(re)? # None
六、匿名函數(shù)
匿名函數(shù)還是函數(shù)骂铁,除了聲明的語法以外吹零,函數(shù)其他的語法匿名函數(shù)都支持
1、匿名函數(shù)的聲明
a.語法:
函數(shù)名 = lambda 參數(shù)列表:返回值
b.說明:
函數(shù)名 - 變量名
lambda - 關鍵字
參數(shù)列表 - 和普通函數(shù)的參數(shù)列表的作用和要求是一樣的
返回值 - 相當于普通函數(shù)return關鍵字后面的表達式
注意:匿名函數(shù)中冒號后面的語句屬于函數(shù)體拉庵。在聲明的時候不會執(zhí)行
匿名函數(shù)的調(diào)用和普通函數(shù)一模一樣
# 用匿名函數(shù)求兩個數(shù)的和
def my_sum(num1,num2):
returm num1 + num2
my_sum = lambda num1,num2 : num1+num2
#寫一個匿名函數(shù)灿椅,求兩個數(shù)中的最大值
my_max = lambda num1,num2 : max(num1,num2)
my_max2 = lambada num1,num2 : num1 if num1>num2 else num2
補充:python中的三目運算符
a.
C中的三目運算符:條件語句?值1:值2;? -? 條件語句為True,整個表達式的結(jié)果是指1茫蛹,否則是指2.
int x = 10 ,y = 20;
max = x>y?x:y;
b.
python中的三目運算符: 值1 if 條件語句 else 值2? -? 條件語句為True婴洼,整個表達式的結(jié)果是指1欢唾,否則是指2.
x = 10
y = 20
max1 = x if x>y else y
#寫一個匿名函數(shù)肩刃,獲取指定字典中,指定的key對應的值
my_value = lambda dict1,key:dict1[key]