从实参角度,看*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) #按位置放在按照关键字之前