我是靠谱客的博主 长情楼房,最近开发中收集的这篇文章主要介绍python中的*args和**kargs一、百变星(*)君之参数打包——*args二、百变星(*)君之解包——*,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

*args:可变参数,**kwargs字典格式的可变参数;同时使用时,*args必须在*kwargs之前,否则会提示语法错误

一、百变星(*)君之参数打包——*args

常见的例子:

def sum(*args):
    sum=0
    for item in args:
        sum+=item
    return sum

if __name__=="__main__":
   print(sum(1,2,3,4,5))

可见,*args可以接受NN多个参数,那么args到底是什么呢?参见下面:

def what_is(*args):
    print(type(args))

调用此函数,你会发现输出为:<class 'tuple'>    #元组类型

其他的使用例子:

      

def sum2(a,b,c,*args):
    sum=0;
    sum+=a*b*c
    for item in args:
        sum+=item
    return sum

    要求至少输入a、b、c三个参数,调用方法:sum2(1,2,3)  、sum2(1,2,3,4,5,6,7,8,9)

∗的作用:函数接受实参时,按顺序分配给函数形参,如果遇到带∗的形参,那么就把实参打包为(pack)为tuple,并把打包后的tuple分配给带∗的形参(习惯命名为*args)。

二、百变星(*)君之解包——*

 看见下面的例子:

def sum(a,b,c,d,e,f):
    return a+b+c+d+e+f

if __name__=="__main__":
    list=[1,2,3,4,5,6]
    print(sum(*list))

   *list把list中的元素解包(从list中把所有的元素取出来,然后依次赋值给sum的形参),这就是解包了。那么如果list中元素的个数与sum可接受的形参的个数不匹配怎么办?

见下面的例子:

def sum(a,b,c,d,e,f):
    return a+b+c+d+e+f

if __name__=="__main__":
    list=[1,2,3,4,5,6,7,8,9,10]
    print(sum(*list))

则会报错如下:
Traceback (most recent call last):
  File "D:/work/mms/agent_base/tests/tmp.py", line 13, in <module>
    print(sum(*list))
TypeError: sum() takes 6 positional arguments but 10 were given

三、百变星星(**)君之参数打包**kwargs

      如果明白了上面讲到的*args,那么**kwargs也就不难理解了,但区别还是有的,如下:

    简单来说就是: 
  打包(pack):*args是把多个参数打包成tuple,**kwargs是把k、v参数打包成字典。 
  拆分(unpack):*args是把打包了的参数依次拆成单个的,依次赋值给函数的形参,**kwargs是把字典的键值拆成单个的,依次赋值给函数的形参。

调用示例:

def sum(**kwargs):
    print(kwargs)

if __name__=="__main__":
    sum(a=1,b=2,c=3)
输出如下:
{'a': 1, 'b': 2, 'c': 3}

四、百变星星(**)君之解包——**

   与*的道理相同,如下:

  

def sum(a,b,c):
    print(a,b,c)

if __name__=="__main__":
    sum(**{"c":1,"b":2,"a":3})

输出如下:
3 2 1

至此,应该讲清楚了*args、**kwargs的作用场景及意义

最后

以上就是长情楼房为你收集整理的python中的*args和**kargs一、百变星(*)君之参数打包——*args二、百变星(*)君之解包——*的全部内容,希望文章能够帮你解决python中的*args和**kargs一、百变星(*)君之参数打包——*args二、百变星(*)君之解包——*所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部