zoukankan      html  css  js  c++  java
  • Python中*args 和 **kwargs的用法总结

    对于大部分Python新手来说,*args和**kwargs这两个魔法变量需要花大量的时间来解释。那么它们到底是什么呢?在什么时候使用它们呢?要搞清楚这些问题,首先你要明白,其实并不是必须写成*args和**kwargs。只有变量前面的*(星号)才是必须的。那下面就让我们先看看在Python中*args 和 **kwargs的用法总结的吧

    1、*args的用法

    *args和**kwargs主要用于函数定义。你可以将不定数量的参数传递给一个函数。这里的不定指的是预先并不知道函数使用者会传递多少个参数给你,所以在这个场景下使用这两个关键字。*args是用来发送一个非键值对的可变数量的参数列表给一个函数.下面举个例子帮你理解这个概念:

    def test_ var_ args(f_ _arg, *argv) :
    print ("first normal arg:", f_ arg)
    for arg in argv :
    print ( " another arg through *argv:", arg)
    test_ var_ args(' yasoob',' python',' eggs' ,' test' )

    这会产生如下输出:

    first normal arg: yasoob
    another arg through *argv: python
    another arg through *argv: eggs
    another arg through *argv : test

    2、**kwargs的用法

    **kwargs允许你将不定长度的键值对,作为参数传递给一个函数。 如果你想要在一个函数里处理带名字的参数,你应该使用**kwargs。这里有个让你上手的例子:

    def greet_ me (**kwargs) :
    for key, value in kwargs. items () :
    print("{0} == {1}". format (key, value) )

     

    >>> greet me (name="yasoob")
    name == yasoob

    现在你可以看出我们怎样在一个函数里,处理了一个键值对参数了。这就是**kwargs的基础,而且你可以看出它有多么管用。

    3、使用*args和**kwargs来调用函数

    假设你有这样一个小函数:

    def test_ _args_ kwargs (arg1, arg2, arg3) :
    print ("arg1:",arg1)
    print("arg2:", arg2) .
    print ("arg3:",arg3)

    你可以使用*args或** kwargs来给这个小函数传递参数。下面是怎样做:

    #口先使口 *args .
    >>> args = ("two", 3, 5)
    >>> test_ args_ kwargs (*args)
    arg1: twO
    arg2: 3
    arg3: 5
    # 现在使口 **kwargs:
    >>> kwargs = {"arg3": 3, "arg2": "two", "arg1": 5}
    >>> test_ args_ kwargs (** kwargs)
    arg1: 5
    arg2: two
    arg3: 3

    4、标准参数与*args、**kwargs在使用时的顺序

    那么如果你想在函数里同时使用所有这三种参数,顺序是这样的:

    some_ func(fargs, *args, **kwargs)

    5、什么时候使用Python中*args 和 **kwargs?

    这还真的要看你的需求而定。最常见的用例是在写函数装饰器的时候。此外它也可以用来做猴子补丁。猴子补丁的意思是在程序运行时,(runtime)修改某些代码。打个比方,你有一个类,里面有个叫get_ info的函数会调用一个API并返回相应的数据。如果我们想测试它,可以把API调用替换成一些测试数据。例如:

    import someclass
    def get_ info(self, *args) :
        return "Test data"
    someclass.get_ info = get_ info

    以上就是Python中*args 和 **kwargs的用法总结,大家的疑惑都解决了吗?公众号:学习py最风sao的方式欢迎大家继续关注!

  • 相关阅读:
    iot 表索引dump《2》
    heap表和iot表排序规则不同
    Cannot complete the install because one or more required items could not be found.
    iot表输出按主键列排序,heap表不是
    iot 表主键存放所有数据,且按数据插入顺序排序
    iot表和heap表排序规则不同
    org.eclipse.graphiti.ui.editor.DiagramEditorInput.
    Oracle 排序规则
    perl 异步超时 打印错误
    14.6.3 Grouping DML Operations with Transactions 组DML操作
  • 原文地址:https://www.cnblogs.com/nanhe/p/13166567.html
Copyright © 2011-2022 走看看