48

示例使用:

def f(a, b, c, d): 
    print(a, b, c, d, sep = '&')

f(1,2,3,4)
>>> 1&2&3&4

f(*[1, 2, 3, 4])
>>> 1&2&3&4

python文档在哪里*解释?

4

2 回答 2

53

*args调用约定记录在表达式参考中

如果语法*expression出现在函数调用中,则expression必须计算为可迭代。来自这个可迭代的元素被视为附加的位置参数;如果有位置参数x1, ..., xN并且expression计算结果为序列y1, ..., yM,则这等效于使用 M+N 位置参数x1, ..., xN, y1, ..的调用., yM .

因此,由于您用作[1, 2, 3, 4]可迭代的表达式,并且没有其他位置参数,因此它被视为 M=0 和 N=4 的调用,总共有 4 个位置参数。

因此,您也可以将您的函数称为f(1, 2, *[3, 4])可迭代参数和位置参数的任何其他组合,前提是可迭代参数位于位置参数之后

于 2012-09-26T09:01:56.820 回答
4

只是非常简单地扩展了未命名和命名参数的组合。

这是您要记住的一般顺序:

def func(arg_1, ..., arg_N, *args, kwarg_1, ..., kwarg_M, **kwargs):
    # do stuff
    return True

哪里,在最典型的情况下;

  • 每个单曲arg_i都是一个未命名的参数,
  • args是一个列表,因此是一组未命名的参数,
  • 每个单曲kwarg_j都是一个命名参数,
  • kwargs是一个字典,因此是一组命名参数。
于 2021-03-25T15:15:53.807 回答