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

时间:2010-11-23 10:32:06

标签: 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))

有人可以解释一下*数字和**关键字如何获取参数? 一个简单的解释非常值得赞赏 提前致谢

2 个答案:

答案 0 :(得分:23)

在代码numbers中分配了(1,2,3)元组。 keywords被分配了一个字典,其中包含vegetablesfruits

一颗星(*)定义位置参数。这意味着您可以接收任意数量的参数。您可以将传递的参数视为元组。

两颗星(**)定义关键字参数。

参考资料可用here

实施例

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

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

虽然经验丰富的程序员理解2.x中发生的事情,但这是违反直觉的(只要有足够的位置参数,无论关键字参数如何,位置参数都会绑定到foo=

Python 3.x使用PEP-3102引入更直观的仅关键字参数(varargs只能通过名称绑定后的关键字参数)

答案 1 :(得分:1)

让我们先细分功能。

该总功能具有三个参数。

  1. initial = 5 =>这是关键字参数。
  2. * numbers =>这也称为* args。您可以根据需要传递任意数量的参数。
  3. ** keywords =>这是一个类似于字典的关键字参数,每个键都与给定值相关联。

=======================================

count =初始

**我们知道initial是包含5的关键字参数。 因此,现在将值5分配给了一个名为count的变量。

数字中的数字:

*数字是数字的占位符。

*我们知道数字是一个任意参数,因此它可以接受任意数量的参数或值。

*因此,数字现在将包含在执行函数时在numbers参数中传递的参数。

count + =数字

*每次它循环遍历numbers参数并将计数加到数字上并返回一个计数

*当count为5时,它将循环遍历参数并添加参数的第一个实例。这将重复进行直到循环耗尽为止。

用于键入关键字:

*这很棘手,因为这次参数是字典类型,其中包含键和该键的对应值。

计数+ =个关键字[键]

返回计数

100 + 50 +(10,1,2,3)=> 166。

我知道这个答案太大了,但是了解每个函数的基本概念是一个全面的程序员的核心力量。