Python函数的参数
VarArgs 参数有时,你或许想定义一个能获取任意个数参数的函数,这可通过使用 * 号来实现。#!/usr/bin/python# Filename: total.pydef total(initial=5, *numbers, **keywords):count = initialfor number in numbers:count += number
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)。
更多推荐
所有评论(0)