我的例子是:
>>> 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
Run Code Online (Sandbox Code Playgroud)
要彻底了解它,我想查阅有关'*'的文档.
你能建议我去哪儿看吗?
Mar*_*ers 27
该*args调用约定被记录在表达式参考:
如果语法
*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]),如果iterable 位于positionals 之后,您也可以将函数称为可迭代和位置参数的任何其他组合.
只是对未命名和命名参数的组合进行简单扩展的补充。
这是您要记住的一般顺序:
def func(arg_1, ..., arg_N, *args, kwarg_1, ..., kwarg_M, **kwargs):
# do stuff
return True
Run Code Online (Sandbox Code Playgroud)
在大多数典型情况下;
arg_i都是一个未命名的参数,args是一个列表,因此是一组未命名的参数,kwarg_j都是一个命名参数,kwargs是一本字典,因此是一组命名参数。