python中参数带*
函数传参和函数定义时的*,含义不同。
1.调用函数时使用* 与 **
def test(a,b,c):
return a+b+c
q = [1,2,3]
p = {'a':1,'b':2,'c':3}
print(test(**p))
print(test(*q))
*为传入序列,列表元组都行,每个位置对应a,b,c 不能超出也不能少于 相当于test(1,2,3)
**为传入字典,a ,b ,c一定要对应参数的名字一样 相当于 test(a=1,b=2,c=3)
2.定义函数时使用* 与 **
def test1(*q):
return np.sum(q)
def test2(**q):
return q
print(test1(1,2,3))
print(test2(a=1,b=2,c=3))
*为把传入的数据封装成数列,**为把传入的数据封装成字典
此外,一个(*)号还可以解压参数列表:
def add(*q):
print(q)
if __name__ == '__main__':
q = [[1,2],[3,4]]
p = [1,2,3,4]
add(q)
add(p)
add(*q)
add(*p)
output:
([[1, 2], [3, 4]],)
([1, 2, 3, 4],)
([1, 2], [3, 4])
(1, 2, 3, 4)