Python 函數(shù)編程的基礎(chǔ)知識(shí)介紹
函數(shù)基礎(chǔ)知識(shí)
掌握自定義函數(shù)的基本語法規(guī)范和調(diào)用方法及掌握函數(shù)的各種參數(shù)的使用及調(diào)用規(guī)則。
1、Python函數(shù)
- 函數(shù)( Function )是組織好的,可重復(fù)使用的,用來實(shí)現(xiàn)單一, 或相關(guān)聯(lián)功能的代碼段。
- 函數(shù)能提高應(yīng)用的模塊性 ,和代碼的重復(fù)利用率。
- 我們已經(jīng)接觸過Python提供的許多內(nèi)建函數(shù) ,比如print()。
- 但你也可以自己創(chuàng)建函數(shù),這被叫做用戶自定義函數(shù)。
2、自定義一個(gè)函數(shù)基本規(guī)則
你可以定義一個(gè)由自己想要功能的函數(shù),以下是簡(jiǎn)單的規(guī)則:
- 函數(shù)代碼塊以 def關(guān)鍵詞開頭,后接函數(shù)標(biāo)識(shí)符名稱和圓括號(hào)( )。
- 任何傳入?yún)?shù)和自變量必須放在圓括號(hào) 中間。圓括號(hào)之間可以用于定義參數(shù)。
- 函數(shù)的第一 -行語句可以選擇性地使用文檔字符串一 -用于存放函數(shù)說明。
- 函數(shù)內(nèi)容以冒 號(hào)起始,并且縮進(jìn)。
- returm [表達(dá)式]結(jié)束函數(shù),選擇性地返回一個(gè)值給調(diào)用方。
- 不帶表達(dá)式的return相當(dāng)于返回 None。
3、自定義一個(gè)函數(shù)語法
定義函數(shù)的語法:
def 函數(shù)標(biāo)識(shí)名稱(參數(shù)列表):
“函數(shù)_文檔字符串,對(duì)函數(shù)進(jìn)行說明"
函數(shù)體
return [表達(dá)式]
默認(rèn)情況下,參數(shù)值和參數(shù)名稱是按函數(shù)聲明中定義的順序匹配起來的。
4、函數(shù)的調(diào)用
定義一個(gè)函數(shù)只給了函數(shù)-一個(gè)名稱,指定了函數(shù)里包含的參數(shù),和代碼塊結(jié)構(gòu)。
這個(gè)函數(shù)的基本結(jié)構(gòu)完成以后,你可以通過另-個(gè)函數(shù)調(diào)用執(zhí)行,也可以直接從Python提示符執(zhí)行。
如下實(shí)例調(diào)用了printme ( )函數(shù):
調(diào)用后輸出的結(jié)果為:
4、return關(guān)鍵字
- return語句[表達(dá)式]退出函數(shù),選擇性地向調(diào)用方返回一一個(gè)表達(dá)式。
- 不帶參數(shù)值的return語句返回None。
- 之前的例子都沒有示范如何返回?cái)?shù)值,下例告訴你怎么做:
5、參數(shù)的傳遞
在python中,類型屬于對(duì)象,變量是沒有類型的:
a=[1,2,3]
a="Runoob"
以上代碼中,[1,2,3] 是List類型,"Runoob” 是 String類型,而變量a是沒有類型,它僅僅是一個(gè)對(duì)象的引用(-一個(gè)指針) , 可以是List類型對(duì)象,也可以指向String類型對(duì)象。
Python函數(shù)的參數(shù)傳遞
- 不可變類型 :在程序編程中的值傳遞,如整數(shù)、字符串、元組。如fun(a), 傳遞的只是a的值,沒有影響a對(duì)象本身。比如在fun( a)內(nèi)部修改a的值,只是修改另一個(gè)復(fù)制的對(duì)象,不會(huì)影響a本身。我們經(jīng)常稱之為值傳遞。
- 可變類型:類似編程中的引用傳遞(址傳遞),如列表,字典。如fun(la),則是將la真正的傳過去,修改后fun外部的la也會(huì)受影響。
python中-切都是對(duì)象,嚴(yán)格意義我們不能說值傳遞還是引用傳遞,我們應(yīng)該說傳不可變對(duì)象和傳可變對(duì)象。
6、參數(shù)
以下是調(diào)用函數(shù)時(shí)可使用的正式參數(shù)類型:
- 必備參數(shù)。
- 關(guān)鍵字參數(shù)。
- 默認(rèn)參數(shù)。
- 不定長(zhǎng)參數(shù)。
必備參數(shù)
必備參數(shù)須以正確的順序傳入函數(shù)。調(diào)用時(shí)的數(shù)量必須和聲明時(shí)的一樣。
示例:
ch06-demo01-args-necessary.py
調(diào)用greeting()函數(shù),你必須傳入一個(gè)參數(shù),不然會(huì)出現(xiàn)語法錯(cuò)誤:
關(guān)鍵字參數(shù)
關(guān)鍵字參數(shù)和函數(shù)調(diào)用關(guān)系緊密,函數(shù)調(diào)用使用關(guān)鍵字參數(shù)來確定傳入的參數(shù)值。
使用關(guān)鍵字參 數(shù)允許函數(shù)調(diào)用時(shí)參數(shù)的順序與聲明時(shí)不一致,因?yàn)镻ython解釋器能夠用參數(shù)名匹配參數(shù)值。
示例:
ch06-demo02-keyword.py
以下實(shí)例在函數(shù)printinfo()調(diào)用時(shí)使用參數(shù)名:
缺省參數(shù)
調(diào)用函數(shù)時(shí),缺省參數(shù)的值如果沒有傳入,則被認(rèn)為是默認(rèn)值。
示例:
ch06-demo03-args-default.py
打印默認(rèn)的age,如果age沒有被傳入:
注意:缺省值必須放在最后一個(gè)參數(shù)。
不定長(zhǎng)參數(shù)*args
可能需要一個(gè)函數(shù)能處理比當(dāng)初聲明時(shí)更多的參數(shù)。這些參數(shù)叫做不定長(zhǎng)參數(shù)。
適用于當(dāng)參數(shù)個(gè)數(shù)不確定或根據(jù)調(diào)用情況其參數(shù)個(gè)數(shù)會(huì)動(dòng)態(tài)變化的情況。
基本語法如下:
def函數(shù)名稱(formal args, *args ):
“函數(shù)_文檔字符串"
函數(shù)體
retum [表達(dá)式]
加了星號(hào)(* )的變量名會(huì)存放所有未命名的變量參數(shù)。選擇不多傳參數(shù)也可,可變長(zhǎng)參數(shù)的類型為元組。
補(bǔ)充: **kw
**兩個(gè)型號(hào)代表接受的是一個(gè)可變長(zhǎng)度的 字典類型的參數(shù)。
因此,改參數(shù)必須以k-v值結(jié)構(gòu)出現(xiàn)。
def函數(shù)名稱(formal _args, **kw ):
“函數(shù)_文檔字符串”
函數(shù)體
retum [表達(dá)式
加了星號(hào)(** )的變量名會(huì)存放所有未命名的變量參數(shù)。選擇不多傳參數(shù)也可,可變長(zhǎng)參數(shù)的類型為字典。
總結(jié): *argv和**kw的區(qū)別
兩個(gè)參數(shù)必須為函數(shù)定義中參數(shù)列表中的排名最后的參數(shù)。
*argv代表該參數(shù)位置可以放任意個(gè)數(shù)的數(shù)據(jù),最終都會(huì)轉(zhuǎn)換成元組數(shù)據(jù)類型在函數(shù)體內(nèi)處理。
**kw代表該參數(shù)位置可以放k=v格式的數(shù)據(jù),最終都會(huì)轉(zhuǎn)換成字典類型數(shù)據(jù)安函數(shù)體內(nèi)處理。