Python3:用于解压缩列表的带星号的表达式

Python3:用于解压缩列表的带星号的表达式,python,python-3.x,argument-unpacking,Python,Python 3.x,Argument Unpacking,示例用法: 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文档中的哪里解释了*?调用约定记录在: 如果语法*表达式出现在函数调用中,表达式的计算结果必须为iterable。此iterable中的元素被视为附加的位置参数;如果存

示例用法:

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文档中的哪里解释了
*

调用约定记录在:

如果语法
*表达式
出现在函数调用中,
表达式
的计算结果必须为iterable。此iterable中的元素被视为附加的位置参数;如果存在位置参数x1,…,xN和
表达式
的计算结果为序列y1,…,yM,则这相当于使用M+N位置参数x1,…,xN,y1,…,yM的调用

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


因此,您也可以将函数调用为
f(1,2,*[3,4])
或iterable和positional参数的任何其他组合,只要iterable位于positional参数之后。

只是对未命名参数和命名参数组合的简单扩展的一个补充

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

def func(arg_1, ..., arg_N, *args, kwarg_1, ..., kwarg_M, **kwargs):
    # do stuff
    return True
其中,在大多数典型情况下

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

相关问题:语言参考的相关部分在这里:。请在此处查找以“如果函数调用中出现语法*表达式”开头的句子,这是一个很好的解释: