Python 3:用于解压缩列表的已加星标表达式

时间:2012-09-23 19:38:20

标签: python-3.x

我的例子是:

>>> 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

要彻底了解它,我想查阅有关'*'的文档。

你能建议我去哪儿看看吗?

2 个答案:

答案 0 :(得分:21)

*args调用约定记录在Expressions reference

  

如果语法*expression出现在函数调用中,expression必须求值为iterable。来自此迭代的元素被视为它们是附加的位置参数;如果存在位置参数 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])或可迭代和位置参数的任何其他组合,前提是迭代在位置后

答案 1 :(得分:0)

只是对未命名和命名参数的组合进行非常简单的扩展。

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

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

在大多数典型情况下;

  • 每个 arg_i 都是一个未命名的参数,
  • args 是一个列表,因此是一组未命名的参数,
  • 每个 kwarg_j 都是一个命名参数,
  • kwargs 是一个字典,因此是一组命名参数。