在Python中解释关键字参数(VarArgs)

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被分配一个字典,包含vegetablesfruits.

一个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只能通过名称绑定后的关键字参数)