關鍵字參數
如果你有一些具有許多參數的函數,而你又希望只對其中的一些進行指定,那么你可以通過命名它們來給這些參數賦值——這就是python關鍵字參數(Keyword Arguments)——我們使用命名(關鍵字)而非位置(一直以來我們所使用的方式)來指定函數中的參數。
這樣做有兩大優點——其一,我們不再需要考慮參數的順序,函數的使用將更加容易。其二,我們可以只對那些我們希望賦予的參數以賦值,只要其它的參數都具有默認參數值。
案例(保存為 function_keyword.py):
def func(a, b=5, c=10): print('a is', a, 'and b is', b, 'and c is', c) func(3, 7) func(25, c=24) func(c=50, a=100)
輸出:
$ python function_keyword.py a is 3 and b is 7 and c is 10 a is 25 and b is 5 and c is 24 a is 100 and b is 5 and c is 50
它是如何工作的
名為 func 的函數有一個沒有默認參數值的參數,后跟兩個各自帶有默認參數值的參數。
在第一次調用python函數時,func(3, 7),參數 a 獲得了值 3,參數 b 獲得了值 7,而 c 獲得了默認參數值 10。
在第二次調用函數時,func(25, c=24),由於其所處的位置,變量 a 首先獲得了值 25。然后,由於命名——即關鍵字參數——指定,變量 c 獲得了值 24。變量 b 獲得默認參數值 5。
在第三次調用函數時,func(c=50, a=100),我們全部使用關鍵字參數來指定值。在這里要注意到,盡管 a 在 c 之前定義,但我們還是在變量 a 之前指定了變量 c。
有時你可能想定義的函數里面能夠有任意數量的變量,也就是參數數量是可變的,這可以通過使用星號來實現(將下方案例保存為 function_varargs.py):
def total(a=5, *numbers, **phonebook): print('a', a) #遍歷元組中的所有項目 for single_item in numbers: print('single_item', single_item) #遍歷字典中的所有項目 for first_part, second_part in phonebook.items(): print(first_part,second_part) print(total(10,1,2,3,Jack=1123,John=2231,Inge=1560))
輸出:
$ python function_varargs.py a 10 single_item 1 single_item 2 single_item 3 Inge 1560 John 2231 Jack 1123 None
它是如何工作的
當我們聲明一個諸如 *param 的星號參數時,從此處開始直到結束的所有位置參數(Positional Arguments)都將被收集並匯集成一個稱為“param”的元組(Tuple)。
類似地,當我們聲明一個諸如 **param 的雙星號參數時,從此處開始直至結束的所有關鍵字參數都將被收集並匯集成一個名為 param 的字典(Dictionary)。
我們將在后面的章節探索有關Python元組和字典的更多內容。
