• python(3)-函数动态参数


    先来看一段代码

    def show(*arg):
        print(arg, type(arg))
    
    
    if __name__ == "__main__":
        show(1)
        show(1,2,3,4,5)

    现在执行一下,看看执行结果:

    (1,) <class 'tuple'>
    (1, 2, 3, 4, 5) <class 'tuple'>

    可以看到,程序输出了两个元组,但神奇的是函数可以接受一个参数,也可以接受很多个参数,这就是python的动态参数。

    那么我们来想一想,给show()函数传递一个列表,那么执行结果是什么呢?

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

    可以看到,show()函数将整个列表当作一个元组的元素进行输出了;再给它传递一个字典进去,试试看:

    ({1: 2, 2: 3},) <class 'tuple'>

    把字典也当作了元组中的一个元素输出了,所以可以看出 *arg 将传入的所有参数都转换成了元组。

    接下来,再来看一段代码,我们把 * 换成 **,先传递一个数字进去:

    def show(**arg):
        print(arg, type(arg))
    
    
    if __name__ == "__main__":
        show(n1=11,n2=22)
    {'n2': 22, 'n1': 11} <class 'dict'>

    可以看到,传递的参数被转换成了字典

    总结一下:

    *  将所有传入的元素转换成元组

    **   将所有传入的元素转换成字典

    把这两种参数放在一起使用试试

    def show(*arg, **kwargs):
        print(arg, type(arg))
        print(kwargs, type(kwargs))
    
    
    if __name__ == "__main__":
        show(11,22,33,n1=11,n2=22)
    
    (11, 22, 33) <class 'tuple'>
    {'n1': 11, 'n2': 22} <class 'dict'>

    这里有一点要注意的是:* 放在前面,**放在后面,顺序不可以错; 传递的参数也必须按照这个顺序,否则会报错。

    那可不可以传列表和字典呢进去呢?

    def show(*arg, **kwargs):
        print(arg, type(arg))
        print(kwargs, type(kwargs))
    
    
    if __name__ == "__main__":
        l = [11,22,33]
        d = {'n1':88, 'n2':99}
        show(*l, **d)
    
    (11, 22, 33) <class 'tuple'>
    {'n2': 99, 'n1': 88} <class 'dict'>

    在列表名前面一定要加*, 在字典前面要加**

  • 相关阅读:
    PHP学习笔记:APACHE配置虚拟目录、一个站点使用多域名配置方式
    转载:分页原理+分页代码+分页类制作
    PHP学习笔记:数据库学习心得
    PHP学习笔记:用mysqli连接数据库
    PHP学习笔记:MySQL数据库的操纵
    PHP学习笔记:利用时间和mt_rand函数获取随机名字
    PHP学习笔记:等比例缩放图片
    前端学习(一) html介绍和head标签
    Python 协程
    Python 线程----线程方法,线程事件,线程队列,线程池,GIL锁,协程,Greenlet
  • 原文地址:https://www.cnblogs.com/huangxm/p/5181569.html
Copyright © 2020-2023  润新知