Python函數的參數

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)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章