Python-函數(shù)基礎(chǔ)

目錄:http://m.itdecent.cn/p/863c446364a8

函數(shù)

函數(shù)是組織好的,可重復(fù)使用的,用來(lái)實(shí)現(xiàn)單一,或相關(guān)聯(lián)功能的代碼段。函數(shù)能提高應(yīng)用的模塊性,和代碼的重復(fù)利用率。

一、定義函數(shù)

規(guī)則:

1、函數(shù)代碼塊由def關(guān)鍵字開(kāi)頭,后接函數(shù)名和圓括號(hào);

2、任何傳入?yún)?shù)和自變量必須放在圓括號(hào)內(nèi)。圓括號(hào)內(nèi)也可以用于定義參數(shù)。

3、函數(shù)內(nèi)容以冒號(hào)起始,并且函數(shù)體縮進(jìn)。

4、return [表達(dá)式]結(jié)束函數(shù),選擇性地返回一個(gè)值給調(diào)用方。不帶表達(dá)式的return相當(dāng)于返回 None。

語(yǔ)法:

def 函數(shù)名(參數(shù)列表):

? ? 函數(shù)體

實(shí)例1(不帶參數(shù)函數(shù)):

def zoo():

? ? '''

? ? 這里可以用來(lái)說(shuō)明函數(shù)作用,參數(shù)類(lèi)型,返回值類(lèi)型

? ? '''
? ? print("歡迎來(lái)到動(dòng)物園")

zoo()? ?#使用函數(shù)名+(),可以直接調(diào)用函數(shù)

運(yùn)行結(jié)果為:

歡迎來(lái)到動(dòng)物園

實(shí)例2(帶參數(shù)函數(shù)):

def zoo(name):

? ? print("welcome to zoo ",name)

def zoo1(name):

? ? return "welcome to zoo "+name? ? ? ? ??#return將結(jié)果返回主函數(shù), 即zoo1("LIMing")

zoo("Lisa")? ? ? ? ? ? ? ? ? ? ? ? #因?yàn)楹瘮?shù)定義中有參數(shù),所以我們要把 ‘Lisa’ 傳入函數(shù)中

print(zoo1("LiMing"))

#return有返回值,他會(huì)將結(jié)果返回給函數(shù);print沒(méi)有返回值,會(huì)直接輸出結(jié)果。

運(yùn)行結(jié)果為:

welcome to zoo Lisa?

welcome to zoo LiMing?


函數(shù)調(diào)用

我們調(diào)用函數(shù)只需要使用函數(shù)名()就可以完成函數(shù)的調(diào)用,例如實(shí)例1中我們調(diào)用zoo()這個(gè)函數(shù),直接使用zoo()就完成了調(diào)用;當(dāng)然如果我們調(diào)用的函數(shù)是有參數(shù)的,那么我們?cè)谡{(diào)用函數(shù)時(shí)也要聲明我們需要傳入的參數(shù),比如我們的實(shí)例2,調(diào)用了zoo(name)這個(gè)函數(shù),我們就需要使用 zoo("lisa")傳入一個(gè)參數(shù)。

二、帶參函數(shù)

帶參函數(shù)的參數(shù)類(lèi)型分為必需參數(shù)、關(guān)鍵字參數(shù)、默認(rèn)參數(shù)、不定長(zhǎng)參數(shù)四種。

(1) 必要參數(shù)函數(shù)

必要參數(shù)是最基礎(chǔ)的函數(shù)調(diào)用,要求嚴(yán)格,須以正確的順序傳入函數(shù)。調(diào)用時(shí)的數(shù)量必須和聲明時(shí)的一樣。

語(yǔ)法:

def 函數(shù)名(必要參數(shù)1,必要參數(shù)2,...,必要參數(shù)N):
? ? 函數(shù)體

實(shí)例:

def zoo(name1,name2,name3):
? ? print("今天%s,%s和%s一起去了動(dòng)物園"%(name1,name2,name3))

zoo("Lisa","LiMing","siri")


運(yùn)行結(jié)果為:

今天Lisa,LiMing和siri一起去了動(dòng)物園

(2)關(guān)鍵字參數(shù)函數(shù)

關(guān)鍵字傳參可以不遵守參數(shù)列表的順序進(jìn)行傳參。

語(yǔ)法:

def 函數(shù)名(參數(shù)1,參數(shù)2,...,參數(shù)N):

? ? 函數(shù)體

函數(shù)名(參數(shù)2=標(biāo)識(shí)符1,參數(shù)1=標(biāo)識(shí)符2)

實(shí)例:

def zoo(name1,name2,name3):

????print("今天%s,%s和%s一起去了動(dòng)物園"%(name1,name2,name3))

zoo(name2="Lisa",name3="LiMing",name1="siri")

運(yùn)行結(jié)果為:

今天siri,Lisa和LiMing一起去了動(dòng)物園? ? ? ?#因?yàn)槲覀冎付藚?shù)傳遞的位置,這次輸出的

結(jié)果和上個(gè)例子有些差別。


(3)默認(rèn)參數(shù)函數(shù)

默認(rèn)參數(shù)函數(shù)是在函數(shù)定義時(shí),給參數(shù)附上默認(rèn)值的定義方式。這樣在調(diào)用函數(shù)時(shí),這個(gè)參數(shù)可以不傳參。

語(yǔ)法:

def 函數(shù)名(參數(shù)1,參數(shù)2=默認(rèn)值):

? ? 函數(shù)體

函數(shù)名(參數(shù)1=標(biāo)識(shí)符)

實(shí)例:

def zoo(name1,name2="siri"):

????print("今天%s和%s一起去了動(dòng)物園"%(name1,name2))

zoo(name1="Lisa")? ? ? ? ? ? ?#我們并沒(méi)有傳入siri這個(gè)參數(shù),但是在函數(shù)內(nèi)還是使用了siri參

數(shù),而她使用的這個(gè)siri是我們定義函數(shù)時(shí)設(shè)置好的默認(rèn)值 。

運(yùn)行結(jié)果為:

今天Lisa和siri一起去了動(dòng)物園? ? ? ? ??

(4)不定長(zhǎng)參數(shù)函數(shù)

不定長(zhǎng)參數(shù)有一個(gè)*和兩個(gè)*兩種模式,前者表示會(huì)將自身接收的所有參數(shù)轉(zhuǎn)換為一個(gè)元組,后者必須接收關(guān)鍵字參數(shù)傳參,他會(huì)將接收的參數(shù)轉(zhuǎn)換為一個(gè)字典。key是關(guān)鍵字參數(shù)的參數(shù)名稱(chēng),value是其對(duì)應(yīng)的標(biāo)識(shí)符。

語(yǔ)法:

def 函數(shù)名(*args,**kwargs):
? ? 函數(shù)體

函數(shù)名(1,2,a=3,b=4)

#*args會(huì)接收前兩個(gè)參數(shù),并把它聚合為(1,2),**kwargs會(huì)接受后邊兩個(gè)參數(shù),并把它聚合為{"a":3,"b":4}

實(shí)例:

def zoo(*args,**kwargs):

????print(args)

? ? print(kwargs)

zoo("Lisa","Siri","LiMing",BZ="XiaoMing",DY="Wanglaoshi")?

運(yùn)行結(jié)果:

('Lisa', 'Siri', 'LiMing')

{'BZ': 'XiaoMing', 'DY': 'Wanglaoshi'}

‘*’標(biāo)識(shí)符

*標(biāo)識(shí)符更像是一個(gè)分隔符,*標(biāo)識(shí)符后的參數(shù)必須以關(guān)鍵字參數(shù)傳入

def zoo(name1,name2,name3):

????print("今天%s,%s和%s一起去了動(dòng)物園"%(name1,name2,name3))

zoo("Lisa","LiMing",name3="siri")

運(yùn)行結(jié)果為:

今天Lisa,LiMing和siri一起去了動(dòng)物園

參數(shù)傳遞

在Python中,不可變數(shù)據(jù)類(lèi)型傳入函數(shù)體內(nèi),在函數(shù)體內(nèi)發(fā)生任何變化時(shí)不會(huì)影響到變量本身,相當(dāng)于復(fù)制了一個(gè)變量。

實(shí)例1(傳入不可變數(shù)據(jù)類(lèi)型):

def zoo(a):

? ? a=10

? ? print(a)? ? ? ? ? ?

b=2

zoo(b)

print(b)? ? ? ? ? ? #因?yàn)閎為不可變類(lèi)型,此時(shí)的b不會(huì)因?yàn)楹瘮?shù)體內(nèi)的操作而變化

運(yùn)行結(jié)果為:

10

2

變量b為2,傳入函數(shù)zoo中并把值賦給了a,這是在函數(shù)體內(nèi)被操作的是a,變量a可以理解為變量b的拷貝,無(wú)論變量a發(fā)生什么變化,都不會(huì)影響變量b的值。

實(shí)例2(傳入可變數(shù)據(jù)類(lèi)型):

def zoo(a)

? ? a.append([6,7,8,9])

? ? print(a)

b=[1,2,3,4,5]

zoo(b)

print(b)? ? ? ? ? ? ? ? #因?yàn)榇藭r(shí)的b為列表,是可變數(shù)據(jù)類(lèi)型,當(dāng)把b的值傳入函數(shù)zoo中,對(duì)a進(jìn)行的操作相當(dāng)于對(duì)b本身進(jìn)行修改。

運(yùn)行結(jié)果為:
[1, 2, 3, 4, 5, [6, 7, 8, 9]]?

[1, 2, 3, 4, 5, [6, 7, 8, 9]]?

可變數(shù)據(jù)類(lèi)型變量傳入后,在函數(shù)內(nèi)發(fā)生變化會(huì)影響到主函數(shù)中的變量數(shù)據(jù),可以理解為把自己本身傳了進(jìn)去。

三、匿名函數(shù)?

關(guān)鍵字lambda表示匿名函數(shù),冒號(hào)前面的n表示函數(shù)參數(shù),可以有多個(gè)參數(shù)。

?匿名函數(shù)有個(gè)限制,就是只能有一個(gè)表達(dá)式,不用寫(xiě)return,返回值就是該表達(dá)式的結(jié)果。

?用匿名函數(shù)有個(gè)好處,因?yàn)楹瘮?shù)沒(méi)有名字,不必?fù)?dān)心函數(shù)名沖突。

此外,匿名函數(shù)也是一個(gè)函數(shù)對(duì)象,也可以把匿名函數(shù)賦值給一個(gè)變量,再利用變量來(lái)調(diào)用該函數(shù): 有些函數(shù)在代碼中只用一次,而且函數(shù)體比較簡(jiǎn)單,使用匿名函數(shù)可以減少代碼量,看起來(lái)比較"優(yōu)雅“

語(yǔ)法:

lambda[arg1[,arg2,.....argn]]:expression

例子

sum=lambda arg1,arg2:arg1+arg2

# 調(diào)用sum函數(shù)

print("相加后的值為 :",sum(10,20))

print("相加后的值為 :",sum(20,20))

運(yùn)行結(jié)果為:

相加后的值為 : 30

?相加后的值為 : 40

四、return 語(yǔ)句

return [表達(dá)式]?語(yǔ)句用于退出函數(shù),向調(diào)用方返回一個(gè)表達(dá)式(返回值)。不帶參數(shù)值的return語(yǔ)句返回None。

def sum(arg1,arg2):# 返回2個(gè)參數(shù)的和."

????total=arg1+arg2

????print("函數(shù)內(nèi) :",total)

????return total

# 調(diào)用sum函數(shù)

total=sum(10,20)

print("函數(shù)外 :",total)

運(yùn)行結(jié)果為:

函數(shù)內(nèi) : 30

函數(shù)外 : 30?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容