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