📜  Python中的*args 和 **kwargs

📅  最后修改于: 2020-04-06 07:31:27             🧑  作者: Mango

*args

Python函数定义中的特殊语法* args用于将可变数量的参数传递给函数。它用于传递非关键字的可变长度参数列表。

  • 语法是使用符号*接受可变数量的参数;按照惯例,它通常与args一词一起使用。
  • * args允许你比以前定义的正式参数的数量更多的参数。使用* args,可以将任意数量的额外参数附加到当前的形式参数上(包括零个额外参数)。
  • 例如:我们想要制作一个乘法函数,它接受任意数量的参数,并且能够将它们全部相乘。可以使用* args完成。
  • 使用*,我们与*关联的变量将变为可迭代的含义,您可以对其进行迭代,运行一些高阶函数(例如map和filter等)。
  • *arg的用法示例:
    # Python展示*args的可变参数用法
    def myFun(*argv):
        for arg in argv:
            print (arg)
    myFun('你好', '欢迎', '来到', '芒果文档')

    输出:

    你好
    欢迎
    来到
    芒果文档
    # Python展示*args,结合第一个额外参数
    def myFun(arg1, *argv):
        print ("第一个参数 :", arg1)
        for arg in argv:
            print("*argv下一个参数  :", arg)
    myFun('你好', '欢迎', '来到', '芒果文档')

    输出:

    第一个参数 : 你好
    *argv下一个参数 : 欢迎
    *argv下一个参数 : 来到
    *argv下一个参数 : 芒果文档

     

    **kwargs

    Python函数定义中的特殊语法**kwargs用于传递带有关键字的可变长度参数列表。我们将双星**命名为kwargs。原因是因为双星**允许我们传递关键字参数(以及它们中的任意的组合)。

    • 关键字参数是您在将变量传递给函数时为其提供名称的地方。
    • 可以将kwargs视为一本字典,将每个关键字映射到我们传递给它的值。这就是为什么当我们遍历kwarg时,似乎没有打印出来的任何顺序。
    • ** kwargs用法示例: 
      # Python展示 *kargs
      def myFun(**kwargs):
          for key, value in kwargs.items():
              print ("%s == %s" %(key, value))
      # Driver code
      myFun(first ='芒果', mid ='for', last='芒果')

      输出: 

      last == 芒果
      mid == for
      first == 芒果

       

      # Python展示**kargs,附加一个变量
      def myFun(arg1, **kwargs):
          for key, value in kwargs.items():
              print ("%s == %s" %(key, value))
      # Driver code
      myFun("Hi", first ='芒果', mid ='for', last='芒果')

      输出: 

      last == 芒果
      mid == for
      first == 芒果
    • 使用*args和**kwargs调用函数,例子: 
      def myFun(arg1, arg2, arg3):
          print("arg1:", arg1)
          print("arg2:", arg2)
          print("arg3:", arg3)
      # 使用*args或**kwargs来传递参数
      args = ("芒果", "for", "芒果")
      myFun(*args)
      kwargs = {"arg1" : "芒果", "arg2" : "for", "arg3" : "芒果"}
      myFun(**kwargs)

      输出: 

      arg1: 芒果
      arg2: for
      arg3: 芒果
      arg1: 芒果
      arg2: for
      arg3: 芒果