http://cage.8cuo.org/?p=115
python的參數類型可分為4大類:1.位置參數 2.關鍵字參數 3.元組參數 4.字典參數
一、位置參數:
特點:不限個數;調用時必須提供個數和位置都與形參相同的實參;不靈活。
範例程式碼:
#函式宣告
#第三個參數要能轉化為數字,否則將報錯
def fn(a,b,c):
sum = a + b + c
num = int(c);
#函數調用
fn(1,2,3) #正確的調用
fn(1) #錯誤的調用
fn(1,2,'asd') #錯誤的調用
二、關鍵字參數
特點:不限個數;不用關心形參的順序;當沒有傳遞對應參數時,有預設值供函數使用。
範例程式碼:
#函式宣告
def fn(a = 1,b = 2, c = 0):
print a
print b
print c
#函數調用
fn() #正確,a = 1, b = 2, c= 3
fn(10,11,12) #正確,a = 10, b = 11, c = 12
fn(10,b = 21, c = 30) #正確,a = 10, b = 21, c= 30
fn(10,c = 21, b = 30) #正確,a = 10,b = 30, c = 21
fn(c = 2, b = 4, a = 7) #正確,a = 7, b = 4, c = 2
fn(13, a = 2l, c =8) #錯誤,函數傳遞的第一個參數沒有使用關鍵字。那麼預設會傳遞給函式宣告的第一個形參。後面再次給關鍵字參數 a 傳遞一個值,這時會觸發 python 的 TypeError: multiple values for keyword argument 'a',即:關鍵字參數 a 有多個值
fn(a = 12,1,4) #錯誤,關鍵字參數不管是聲明還是調用時,都應在位置參數的後面
三、元組參數
特點:參數個數不固定(調用是不需要知道需要傳遞幾個參數的),實參的個數可以是 0 個,也可以是無數個。
範例程式碼:
#函式宣告
def fn(*args):
for i in args:
print i
#函數調用
fn(1,2,3) #正確,分別列印出1,2,3
fn(*(1,2,3)) #正確,列印出1,2,3
說明:當函數的參數帶有 * 標誌時,python 會對傳入的參數在內部進行一下處理,即:把獲得的參數轉換為一個元組(tuple)。對於以上樣本中的第一個調用,可分為兩步來理解:
step1:函數接收到了三個實參1,2,3
step2:用這3個實參組成一個 tuple
第二個調用中,函數接收到的參數本身就是一個 tuple,但調用時還是要給這個元群組類型的實參加上*號首碼,以說明這是一個元組參數
四、字典參數
特點:類似於元組參數,不過和元組參數不同的是,字典參數相當於是不固定的關鍵字參數,而元組參數相當於個數不定的位置參數
範例程式碼:
#函式宣告
def fn(**keyargs):
for k,v in keyargs.items():
print k + "=>" + v
#函數調用
fn(a = 2, b = 3, c = 4) #正確,列印出 a => 2,b = > 3, c => 4
fn(**{'a':2,'b':3,'c':4}) #正確,列印出 a => 2,b = > 3, c => 4
說明:和元組參數類似,函數將接收到的參數按 key => value 的方式組成一個字典,以供函數內部使用
最後需要注意的一點就是:
當幾種類型的參數混合使用時,要注意它們的書寫順序,正確的順序應該是:
位置參數 -》關鍵字參數 -》元組或字典參數