从实参角度,看*args的用法:
按位置传值,多出来的值,会被*统一接收,保存成元组的形式。并赋值给args。
*args需要放到位置参数x的后面
*args与y=1一般不会放到一起用
args=元组()
*args=*(x,y,z)
*当成位置参数看
**当成关键字来看
def foo(x,*grgs): #args=(2,3,4,5,6,'a','b')
print(x)
print(args)
foo(1,2,3,4,5,6,'a','b')
def foo(x,y=1,*args):
print(x)
print(y)
print(args)
foo(1,2,3,4,5,6,7,8)
*args与位置参数用
def foo(x,*args,y=1): #*args也是位置函数
print(x)
print(y)
print(args)
foo(1,2,3,4,5,6,7,8,y=10)
#一般而言,*args,与y=1,不会放到一起用
从形参的角度:把*args当成位置参数看
def foo(*args):
print(args)
foo(1,2,3)
结果:(1,2,3)
从实参的角度看:
def bar(x,y,z):
print(x)
print(y)
print(z)
bar(*(1,2,3))
结果:
1
2
3
#**kwargs
把按关键字传值多余的,交给**去处理,把这部分做成字典的形式,赋值给kwargs。
def foo(x,**kwargs):
print(x)
print(y)
foo(x=1,y=2,a=3,b=4)
foo(x,y=2,a=3,b=4)#不能重复赋值
def foo(x,*args,**kwargs):
print(x)
print(args)
print(kwargs)
foo(1,y=1,z=2)
#按位置放在按照关键字之前