Python *args**kwargs

原文: https://thepythonguru.com/python-args-and-kwargs/


于 2020 年 1 月 7 日更新


什么是*args

*args允许我们将可变数量的参数传递给函数。 让我们以一个例子来阐明这一点。

假设您创建了一个将两个数字相加的函数。

  1. def sum(a, b):
  2. print("sum is", a+b)

如您所见,该程序仅接受两个数字,如果您要传递两个以上的参数,这就是*args起作用的地方。

  1. def sum(*args):
  2. s = 0
  3. for i in args:
  4. s += i
  5. print("sum is", s)

现在,您可以像这样将任意数量的参数传递给函数,

  1. >>> sum(1, 2, 3)
  2. 6
  3. >>> sum(1, 2, 3, 4, 5, 7)
  4. 22
  5. >>> sum(1, 2, 3, 4, 5, 7, 8, 9, 10)
  6. 49
  7. >>> sum()
  8. 0

注意

*args的名称只是一个约定,您可以使用任何有效标识符。 例如*myargs是完全有效的。

什么是**kwargs


**kwargs允许我们传递可变数量的关键字参数,例如func_name(name='tim', team='school')

  1. def my_func(**kwargs):
  2. for i, j in kwargs.items():
  3. print(i, j)
  4. my_func(name='tim', sport='football', roll=19)

预期输出

  1. sport football
  2. roll 19
  3. name tim

在函数调用中使用*args**kwargs


您可以使用*args将可迭代变量中的元素传递给函数。 以下示例将清除所有内容。

  1. def my_three(a, b, c):
  2. print(a, b, c)
  3. a = [1,2,3]
  4. my_three(*a) # here list is broken into three elements

注意

仅当参数数量与可迭代变量中的元素数量相同时,此方法才有效。

同样,您可以使用**kwargs来调用如下函数:

  1. def my_three(a, b, c):
  2. print(a, b, c)
  3. a = {'a': "one", 'b': "two", 'c': "three" }
  4. my_three(**a)

请注意,要使此工作有效,需要做两件事:

  1. 函数中的参数名称必须与字典中的键名称匹配。
  2. 参数的数量应与字典中的键的数量相同。