zoukankan      html  css  js  c++  java
  • python函数的万能参数

    我们通过一个简单的事例来展示一下函数的万能参数,我们先写一个最简单的函数

    def test(*args,**kwargs):
        print(args,kwargs)
    

    然后定义两个变量

    l = [1,2,3,4]
    d = {"a":1,"b":2}
    

    下面我们分别看下两种传参的方式有什么不同

    第一种方式

    test(l,d)
    

    如果是使用上面的方式传参,那么l,d这2个变量都会传递给args这个形参,作为args变量的两个元素,kwargs是一个空的字典,没有任何参数传递一个他

    ([1, 2, 3, 4], {'a': 1, 'b': 2}) {}
    

    我们可以看到列表l和字典d被当做一个tuple的两个元素了

    第二种方式

    test(*l,**d)
    

    如果是上面的方式传参,那么l这个变量就会被赋值给args,d这个变量就会被赋值给kwargs

    (1, 2, 3, 4) {'a': 1, 'b': 2}
    

    通过上面的演示,你应该基本上了解python的万能参数了吧,也知道如果函数使用万能参数,你应该如何进行传参了把

    今天被搞糊涂了,又把万能参数梳理一下

    大家先看下这个函数

    def foo(action=None,**kwargs):
        print("action",action,sep="=================>")
        print("kwargs", kwargs, sep="=================>")
     
    d = {"a":1,"b":2}
     
     
    foo(d)
    print("=".center(100,"*"))
     
    foo(**d)
    

    我执行的结果如下
    在这里插入图片描述
    下面我来解释一下

    第一种调用函数的方式,传递了一个字典进去,这个字典会被当做一个整体传递进去,这个字典会被赋值给位置变了,也就是action

    第二种调用函数的方法,通过**字典的方法传递进去,他实际是这样传递的a=1,b=2这样传递进去的,实际上一个命名变量,而这2个变量的名称都不action,所以第二中调用的方式的结果就是

    action为none

    kwargs就是一个字典

    我们在看来下第三种调用的方法

    d = {"action":"action","a":1}
    foo(**d)
    

      

    下面在看下结果,是否就明白了一些了
    在这里插入图片描述

  • 相关阅读:
    块编程指南
    libxml2:Debug模式可以编译,Distribution下不可以?
    CIO应该考虑的九个外包神话和现实
    【Android游戏开发二十四】360°平滑游戏摇杆(触屏方向导航)
    自定义 UITableViewCell 的 accessory 样式
    提升UNIX安全性的Unix SSH示例配置
    java 跟.net webservice 互通问题
    外包合同中降低成本的战略性技巧
    get post
    Android SAX API: XmlResourceParser及其扩展应用
  • 原文地址:https://www.cnblogs.com/python960410445/p/14155604.html
Copyright © 2011-2022 走看看