zoukankan      html  css  js  c++  java
  • Python中*和**的作用(课堂小结)

    以前自学没注意过参数的传导中*和**的用法,这次趁着上课了解了一下,顺便写个随笔记一下。

    1.打包用法

    在参数传导中*args是不定长参数,传入的参数是不限制个数的,比如

    def bdc(*args):
        print(type(args))
        print(args)
    bdc(1,2,3,4,5,6,7,[1,2,3,4,5,6])

    打印出来的结果是

    <class 'tuple'>
    (1, 2, 3, 4, 5, 6, 7, [1, 2, 3, 4, 5, 6])

    也就是说args中保存的是传入的所有参数,保存方式为元组

    再看看**的用法,也就是**kwargs这个关键字参数,比如

    def bdc(**kwargs):
        print(type(kwargs))
        print(kwargs)
    bdc(a=1,b=[1,2,3,4,5],c={1,23,4})
    

    打印出来的结果是

    <class 'dict'>
    {'a': 1, 'b': [1, 2, 3, 4, 5], 'c': {1, 4, 23}}

    也就是说kwargs虽然同样是打包用法,但是保存的格式却不相同,kwargs保存格式为字典

    2.解包用法

    先来看*的解包用法

    def bdc(a,b,c,d):
        print(a,b,c,d,)
    i = (1,2,3,4)
    bdc(*i)

    结果如下

    1 2 3 4

    再来看看**的解包

    def bdc(a,b,c,d):
        print(a,b,c,d,)
    i = {'a':1,'b':2,'c':3,'d':4}
    bdc(**i)

    结果如下

    1 2 3 4

    需要注意的是在定义的时候*和**表示的是打包,但是在调用的时候*和**表示的却是解包,这点不能搞混淆。之前练习不小心混淆了导致一直报错,还有一点是*和**的类型问题,*使用和元祖类型挂钩而**则是和字典,以后要多注意

  • 相关阅读:
    取汉字字串的首字母
    回调函数
    [转].NET对象与COM对象
    [转]TCP与UDP的特点与区别
    【转】一张图分出你是用左脑还是右脑!
    并发基础(Runnable、Thread、Executor)
    Java序列化总结
    Hadoop安装配置手册
    MySQL配置信息解读(my.cnf)
    mysql主从备份、主从切换
  • 原文地址:https://www.cnblogs.com/keima/p/10422308.html
Copyright © 2011-2022 走看看