zoukankan      html  css  js  c++  java
  • python函数动态参数详解

    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}

      

        

    51_陆雅亮
  • 相关阅读:
    洛谷P4113 [HEOI2012]采花
    洛谷P5159 WD与矩阵
    洛谷P1262 间谍网络
    洛谷P3038 牧草种植Grass Planting
    洛谷P3258 [JLOI2014]松鼠的新家
    洛谷P2294 [HNOI2005]狡猾的商人
    洛谷P4878 [USACO05DEC]layout布局
    【CF1132F】Clear the String (DP)
    [AH2017/HNOI2017]大佬(动态规划 搜索)
    「NOI2018」屠龙勇士(CRT)
  • 原文地址:https://www.cnblogs.com/cyalu/p/6019798.html
Copyright © 2011-2022 走看看