因爲參數是函數中非常非常重要的一部分,而Python裏面對參數的特性有很多特殊的要求,所以我們要對函數的參數有一個詳細的瞭解。
下面我們將詳細介紹幾類特殊參數的用法:
默認參數
關鍵字參數VarArgs參數(可變參數類型):在Python中,很多時候我們無法確定一個函數的參數個數。以一個能實現求和的函數爲例,事先你不知道有多少個數會被相加,你甚至不會知道他們的類型是什麼。
例:
# 默認參數的函數,在Python中調用函數時不需要指明所有的參數的值,如果參數沒有被指明將直接使用默認值
def repeat_str(s, times = 1):
repeated_strs = s * times
return repeated_strs
repeated_strings = repeat_str("Happy Birthday!") #只傳入函數中第一個參數的值(字符串),並沒有指明第二個參數值(重複多少次),Python將使用定義函數時參數的默認值
print(repeated_strings)
repeated_strings_2 = repeat_str("Happy Birthday!" , 4) #當函數中兩個參數都被指明時,Python會自動忽略默認值直接使用指定值
print(repeated_strings_2)
注:當我們只指定一個參數時,Python編輯器她怎麼知道指定的是哪一個參數的值?Python在調用函數時,他將會在調用的函數和定義的函數裏面同時取第一個參數作爲對應,也就是說他會把調用函數的第一個參數值賦值給定義函數的第一個參數值,然後再依次往下對比。所以當我們在調用函數裏只用一個參數時,Python首先找到定義函數的第一個參數,定義函數的其他參數將使用默認值。因此Python是按從左到右的順序一一來找對應的,因此Python有一個限制要求,不能再默認參數後面跟隨沒有默認參數。
#f(a, b =2)合法
#f(a = 2, b)非法,因爲Python無法進行對應
def func(a, b = 4, c = 8): #定義函數是b、c使用默認參數
print('a is', a, 'and b is', b, 'and c is', c)
func(13, 17) #13與a對應,17與b對應
func(125, c = 24) #125與a對應,跳過b的值,24與c的值對應(利用關鍵字參數傳入)
func(c = 40, a = 80) #在使用關鍵字參數傳入參數時,順序就沒那麼重要了
def print_paras(fpara, *nums, **words): #“*+參數名”Python將默認傳入的參數是一個list,“**+參數名”Python將多個有關鍵字指明的參數與之對應
print("fpara: " + str(fpara))
print("nums: " + str(nums))
print("words: " + str(words))