我的例子是:
>>> 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
要彻底了解它,我想查阅有关'*'的文档。
你能建议我去哪儿看看吗?
答案 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
是一个字典,因此是一组命名参数。