1.函數(shù)
1.1 定義:
def 函數(shù)名(參數(shù)列表):
語(yǔ)句
return 表達(dá)式
解釋:
def : 函數(shù)代碼塊以def關(guān)鍵字開始
函數(shù)名:遵循標(biāo)識(shí)符規(guī)則
參數(shù)列表:任何傳入函數(shù)的參數(shù)和變量侈贷,必須放在小括號(hào)之間朵耕,使用逗號(hào)分隔葫隙,函數(shù)從函數(shù)的調(diào)用者那里獲取信息【調(diào)用者給函數(shù)傳遞的信息】
():是參數(shù)列表的開始以及結(jié)束
冒號(hào):函數(shù)內(nèi)容【封裝的功能】以冒號(hào)開始统屈,并且縮進(jìn)
語(yǔ)句:函數(shù)封裝的功能
return:一般用于結(jié)束函數(shù),并且返回信息給函數(shù)的調(diào)用者
表達(dá)式:要返回給函數(shù)調(diào)用者的信息
注意:最后的return表達(dá)式可以不寫撑毛,若不寫的情況下默認(rèn)return None
參數(shù)列表 = 參數(shù)1读恃,參數(shù)2,…,參數(shù)n
1.2 函數(shù)的調(diào)用
語(yǔ)法:函數(shù)名([參數(shù)])
若函數(shù)需要此參數(shù)則傳遞代态,不需要?jiǎng)t不傳遞注意:1.函數(shù)不調(diào)用的時(shí)候寺惫,不執(zhí)行。2.定義函數(shù)寫在上面蹦疑,調(diào)用寫在下面西雀。
1.3 最簡(jiǎn)單的函數(shù)
最簡(jiǎn)單的函數(shù),即無(wú)參數(shù)歉摧、無(wú)返回值的函數(shù)
#定義函數(shù)
def myPrint():
print("you are a good man")
#調(diào)用函數(shù)
myPrint()
1.4 參數(shù)的傳遞
參數(shù)傳遞的本質(zhì):實(shí)參給形參賦值的過程
傳遞的參數(shù)與函數(shù)參數(shù)列表中的參數(shù)個(gè)數(shù)保持一致
1.5 位置參數(shù)
位置參數(shù)又稱必選參數(shù)
參數(shù)傳遞與其位置有關(guān).位置不能隨意更改艇肴。
[值傳遞]指?jìng)鬟f不可變類型腔呜,一般指string、tuple和number類型
[引用傳遞]一般傳遞的是可變類型再悼,一般指list核畴,dict和set
注意:對(duì)于可變類型來講在函數(shù)中更改傳遞進(jìn)來的參數(shù)的時(shí)候, 會(huì)將其原值也進(jìn)行更改冲九。
說明:引用傳遞的本質(zhì)上還是值傳遞谤草,只不過傳遞的是地址,
1.6 關(guān)鍵字參數(shù)
概念:用于函數(shù)調(diào)用時(shí)莺奸,通過“鍵-值”的形式加以指定丑孩,可以讓函數(shù)更加清晰、容易使用灭贷,同時(shí)也清除了參數(shù)的順序需求
def func(name, age):
print("I am %s, and I am %d year old"%(name, age))
#一般調(diào)用
func("lili", 18)
#使用關(guān)鍵字參數(shù)
func(age = 18, name = "lili")
關(guān)鍵字參數(shù)之間是不存在先后順序的
當(dāng)賦值的時(shí)候打亂順序温学,只能使用關(guān)鍵字。
當(dāng)位置參數(shù)與關(guān)鍵字參數(shù)同時(shí)存在的時(shí)候甚疟,將關(guān)鍵字參數(shù)寫在位置參數(shù)的后面仗岖。
1.7 默認(rèn)函數(shù)
在定義函數(shù)的時(shí)候,我們?yōu)閰?shù)提供了默認(rèn)值览妖,若調(diào)用函數(shù)的時(shí)候箩帚,
沒有傳此參數(shù),則會(huì)使用默認(rèn)值黄痪,若傳了此參數(shù),則使用傳遞的參數(shù)盔然。
優(yōu)點(diǎn):簡(jiǎn)化了函數(shù)的調(diào)用
def func(name, age=18)
print("I am %s, and I am %d year old"%(name, age))
#一般的函數(shù)調(diào)用
func('lilei', 19)
#關(guān)鍵字參數(shù)調(diào)用
func(name = 'leilei')
#使用默認(rèn)參數(shù)調(diào)用
func('lili')
使用默認(rèn)參數(shù)的時(shí)候需注意:
1.位置參數(shù)在前桅打,默認(rèn)參數(shù)在后,否則python解釋器會(huì)報(bào)錯(cuò)
2.默認(rèn)參數(shù)必須指向不變對(duì)象(字符串等)愈案,不然像列表這種前面的變化會(huì)影響到后面的輸出結(jié)果挺尾。
3.如何設(shè)置默認(rèn)參數(shù)
當(dāng)函數(shù)有多個(gè)參數(shù)時(shí),把變化大的參數(shù)放在前面站绪,變化小的放在后面遭铺,變化小的可以作為默認(rèn)參數(shù)。
有多個(gè)默認(rèn)參數(shù)的時(shí)候恢准,可以按順序提供默認(rèn)參數(shù)魂挂,當(dāng)不按順序提供參數(shù)的時(shí)候需要使用關(guān)鍵字參數(shù)進(jìn)行調(diào)用。
不定長(zhǎng)參數(shù):
定義函數(shù)的時(shí)候馁筐,不確定會(huì)有多少參數(shù)涂召,這種情況下我們可以使用不定長(zhǎng)參數(shù)來處理。即包裹位置參數(shù)或者包裹關(guān)鍵字參數(shù)
特點(diǎn):能處理比聲明時(shí)候更多的參數(shù)【傳遞多少參數(shù)處理多少參數(shù)敏沉,不傳遞則不處理】
1.8 包裹位置參數(shù)--*args
添加了星號(hào)(*)的變量名會(huì)存放所有 未命名的變量參數(shù)
如果在函數(shù)調(diào)用時(shí)沒有指定參數(shù)果正,它就是一個(gè)空的//元組//
包裹位置參數(shù)實(shí)質(zhì)上就是一個(gè)元組炎码,將傳遞的參數(shù)進(jìn)行收集,
并不是所有的參數(shù)都進(jìn)行收集秋泳,它只收集除位置參數(shù)以外多余的參數(shù)【位置參數(shù)】
1.9 包裹關(guān)鍵字傳遞--**kwargs
本質(zhì):是一個(gè)字典(dict)潦闲,將關(guān)鍵字參數(shù)的變量作為key,將其值作為value迫皱。
收集所有的關(guān)鍵字參數(shù)歉闰。傳遞參數(shù)必須使用關(guān)鍵字傳參。
傳遞規(guī)則:
注意舍杜,參數(shù)定義與調(diào)用的順序必須是:必選參數(shù)【位置參數(shù)】新娜、可變參數(shù)【包裹位置參數(shù)】、默認(rèn)參數(shù)既绩、包裹關(guān)鍵字參數(shù)
1.10匿名函數(shù)
定義:不需要定義函數(shù)名的函數(shù)或者是子程序概龄。
特點(diǎn):匿名函數(shù)不使用def定義函數(shù),而是使用lambda來定義饲握。
1.lambda只是一個(gè)表達(dá)式私杜,函數(shù)體比def簡(jiǎn)單
2.關(guān)鍵字lambda表示匿名函數(shù),冒號(hào)前面的x表示函數(shù)參數(shù).
3.匿名函數(shù)有個(gè)限制,就是只能有一個(gè)表達(dá)式,不用寫return,返回值就是該表達(dá)式的結(jié)果.
好處: 函數(shù)沒有名字,不必?fù)?dān)心函數(shù)名沖突
調(diào)用:把匿名函數(shù)賦值給一個(gè)變量,再利用變量來調(diào)用該函數(shù).
語(yǔ)法:
lambda 參數(shù)1,參數(shù)2救欧,…,參數(shù)n: expression[表達(dá)式]
func = lambda a,b : a+b print(func(10,20))
'''
需求:求三角形的面積
輸入三角形底邊衰粹,與三角形的高。
'''
mianji = lambda bian,height : bian*height/2
print(mianji(20,10))
print(type(mianji))