rgo*_*kar 17 python variadic-functions
请参阅以下代码: -
#!/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))
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下*数字和**关键字如何获取参数?很简单的解释非常感谢提前感谢
kgi*_*kis 24
在您的代码numbers中分配了(1,2,3)元组.keywords被分配一个字典,包含vegetables和fruits.
一个star(*)定义位置参数.这意味着您可以接收任意数量的参数.您可以将传递的参数视为元组.
两个星(**)定义关键字参数.
参考资料可在此处获得.
Python 2.x(仅限关键字参数之前)
def foo(x, y, foo=None, *args): print [x, y, foo, args]
foo(1, 2, 3, 4) --> [1, 2, 3, (4, )] # foo == 4
foo(1, 2, 3, 4, foo=True) --> TypeError
Run Code Online (Sandbox Code Playgroud)
Python 3.x(带有关键字的参数)
def foo(x, y, *args, foo=None): print([x, y, foo, args])
foo(1, 2, 3, 4) --> [1, 2, None, (3, 4)] # foo is None
foo(1, 2, 3, 4, foo=True) --> [1, 2, True, (3, 4)]
def combo(x=None, *args, y=None): ... # 2.x and 3.x styles in one function
Run Code Online (Sandbox Code Playgroud)
虽然经验丰富的程序员理解2.x中发生的事情,但这是违反直觉的(foo=只要有足够的位置参数,无论关键字参数如何,位置参数都会受到限制)
Python 3.x使用PEP-3102引入了更直观的仅关键字参数(varargs只能通过名称绑定后的关键字参数)