zoukankan      html  css  js  c++  java
  • *args 和 **kwargs

    并不是必须写成 *args 和 **kwargs 。只有变量前⾯的*(星号)才是必须的.你也可以写成*var和**vars,⽽写成*args和**kwargs只是⼀个通俗的命名约定。
    预先并不知道,函数使⽤者会传递多少个参数给你,所以在这个场景下使⽤这两个关键字。

    • *args
      *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
    
    • **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
    
    • 使⽤ *args 和 **kwargs 来调⽤函数
    def test_args_kwargs(arg1, arg2, arg3):
        print("arg1:", arg1)    
        print("arg2:", arg2)
        print("arg3:", arg3)
    
    # ⾸先使⽤ *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
    
    • 标准参数与*args、 **kwargs在使⽤时的顺序
      some_func(fargs, *args, **kwargs)
    • 啥时候使⽤它们
      最常见的⽤例是在写函数装饰器的时候
      此外它也可以⽤来做猴⼦补丁(monkey patching)。 猴⼦补丁的意思是在程序运⾏时(runtime)修改某些代码。打个⽐⽅,你有⼀个类,⾥⾯有个叫get_info的函数会调⽤⼀个API并返回相应的数据。如果我们想测试它,可以把API调⽤替换成⼀些测试数据。例如:
    import someclass
    
    def get_info(self, *args):
        return "Test data"
    
    someclass.get_info = get_info
    

    资料来源:《python进阶》
    网盘地址:链接:https://pan.baidu.com/s/1auPpCQHMt6rrSR6jAPammQ
    提取码:o3t2
    仅作个人记录

  • 相关阅读:
    samtools使用过程中出现的问题
    转移灶,原发灶,cfDNA的外显子测序得到的突变点的关系
    韦恩图的画法
    python的计算保留小数
    awk的输出格式控制:print 和printf
    awk遇到windows 的^M
    从引物序列出发查找pcr产物的内容和在基因组上的位置
    八.Windows内核保护机制--页保护3--PDE PTE属性
    九.Windows内核保护机制--TSS
    七.Windows内核保护机制--陷阱门
  • 原文地址:https://www.cnblogs.com/fenxiangyuan/p/11830782.html
Copyright © 2011-2022 走看看