• *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
    仅作个人记录

  • 相关阅读:
    黑客术语1
    leetcode笔记--3 Niim game
    台湾ML笔记--1.2 formalize the learning probelm
    台湾ML笔记--1.1什么时候适合使用ML
    leetcode笔记--2 reverse string
    leetcode笔记--1 two-sum
    数据挖掘导论笔记1
    python基础----ipython快捷键
    记录新的开始
    编译器错误消息: CS1617: 选项“6”对 /langversion 无效
  • 原文地址:https://www.cnblogs.com/fenxiangyuan/p/11830782.html
Copyright © 2020-2023  润新知