Python的动态参数:

  1,参数前一个“*”:在函数中会把传的参数转成一个元组。

    

1 def func (*args):
2     print(args)
3 
4 func(123,1,2,'a')

result:(123, 1, 2, 'a')

 

  2,“**args”的参数:函数中被转成一个字典。

    

如果这样传参的话会报错,因为没有指定key或value:
def func (**args):
    print(args)

func(123,1,2,'a')

result:TypeError: func() takes 0 positional arguments but 4 were given



def func (**args):
    print(args)

func (a=1,b=2)

result:{'a': 1, 'b': 2}

3,混合动态参数的情况:

def func (*args,**kwargs):
    print("%s----%s" %(args,kwargs))

func (1,2,a=1,b=2)

Result:(1, 2)----{'b': 2, 'a': 1}

也是没问题的,需要注意的是必须*args在前**kwargs在后,参数也是一样。

4,变量当动态参数的情况:

 

这种情况如果我们直接把一个list传到前面,一个dict传到后面:

def func (*args,**kwargs):
    print("%s----%s" %(args,kwargs))

list=[1,2]
dic={'a':1,'b':2}

func (list,dic)

Result:([1, 2], {'b': 2, 'a': 1})----{}       后面的字典竟然是空的- -!


So,我们需要叫函数知道那个变量是*args的参数,哪个是**args的参数,正确传参写法:
  
func(*list,**dic

Result:(1, 2)----{'a': 1, 'b': 2}

 

  

    

posted on 2016-11-01 16:07  陆雅亮  阅读(2866)  评论(2编辑  收藏  举报