使用示例:
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文档中,哪里详细解释了*
这个符号?
使用示例:
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文档中,哪里详细解释了*
这个符号?
*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])
或其他任何可迭代和位置参数的组合进行调用,前提是可迭代对象位于位置参数之后。
这里简单地补充一下无名参数和命名参数的组合。
你需要记住的一般顺序如下:
def func(arg_1, ..., arg_N, *args, kwarg_1, ..., kwarg_M, **kwargs):
# do stuff
return True
在大多数典型情况下:
arg_i
是一个未命名的参数,args
是一个列表,因此是一组未命名的参数,kwarg_j
是一个带有名称的参数,kwargs
是一个字典,因此是一组带有名称的参数。