*args和**kwargs的用法

从实参角度,看*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)

#按位置放在按照关键字之前

 

 

posted @ 2018-01-07 11:52  老王的农场  阅读(376)  评论(0编辑  收藏  举报