VarArgs 參數
有時,你或許想定義一個能獲取任意個數參數的函數,這可通過使用 * 號來實現。
#!/usr/bin/python
# Filename: total.py
def total(initial=5, *numbers, **keywords):
count = initial
for number in numbers:
count += number
for key in keywords:
count += keywords[key]
return count
print(total(10, 1, 2, 3, vegetables=50, fruits=100))
輸出:
$ python total.py
166
如何工作:
當我們定義一個帶星的參數,像 *param 時,從那一點後所有的參數被收集爲一個叫做 ’param’ 的列表。(譯者注:如在該例中,首先會給 initial 的值由 5 變成 10 ,然後 numbers 將 1,2,3,收集作爲一個列表 numbers=(1,2,3))。
類似地,當我們定義一個帶兩個星的參數,像 **param 時,從那一點開始的所有的關鍵字參數會被收集爲一個叫做 ’param’ 的字典。(譯者注:在該例子中,從 vegetables=50 後的所有參數收集爲一個字典 keywords=’vegetables’: 50, ’fruits’:100)。
Keyword-only 參數
如果想指定特定的關鍵參數爲 keywor-only 而不是位置參數,可以在帶星的參數後申明:
1 #!/usr/bin/python
2 # Filename: keyword_only.py
3
4 def total(initial=5, *numbers, vegetables):
5 count = initial
6 for number in numbers:
7 count += number
8 count += vegetables
9 return count
10
11 print(total(10, 1, 2, 3, vegetables=50))
12 print(total(10, 1, 2, 3,))
13 # Raises error because we have not supplied a default argument
value for 'vegetables'
輸出:
$ python keyword_only.py
66
Traceback (most recent call last):
File "test.py", line 12, in <module>
print(total(10, 1, 2, 3))
TypeError: total() needs keyword-only argument vegetables
如何工作:
在帶星號的參數後面申明參數會導致 keyword-only 參數。如果這些參數沒有默認值,且像上面那樣不給關鍵參數賦值,調用函數的時候會引發錯誤。
如果你想使用 keyword-only 參數,但又不需要帶星的參數,可以簡單地使用不適用名字的空星,如 def total(initial=5, *, vegetables)。