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