**kwargs 和 *args 区别

**kwargs  和  *args 区别  是Python中用于处理可变数量参数的两种机制,它们的主要区别在于参数的类型和处理方式。

在Python中,函数的参数分为三种类型:关键字参数(key arguments)、位置参数(positional arguments)和默认参数(default arguments)。

 

**args用于传递任意数量的非关键字参数给函数。在函数内部,args被作为一个元组(tuple)对待。当你不知道函数会接收多少个位置参数时,可以使用args

def print_args(*args):
    for arg in args:
        print(arg)
print_args(1, 2, 3)  # 输出: 1 2 3

**kwargs用于传递任意数量的关键字参数给函数。在函数内部,kwargs被作为一个字典(dict)对待。当你不知道函数会接收多少个关键字参数时,可以使用kwargs。

def print_kwargs(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")
print_kwargs(name="XiaoMing", age=18)  # 输出: name: XiaoMing age: 18

 

语法和使用场景

  • 在函数定义中,args和kwargs都应该放在所有其他参数的后面,并且分别在前面加上一个星号(*)和两个星号(**)。例如:
    def example_function(*args, **kwargs):
        print("args:", args)
        print("kwargs:", kwargs)
    example_function(1, 2, 3, name="XiaoMing", age=18)  # 输出: args: (1, 2, 3) kwargs: {'name': 'XiaoMing', 'age': 18}

     

  • args和kwargs可以同时使用在一个函数中,但顺序上args必须在kwargs之前.
    def example_function(*args, **kwargs):
        print("args:", args)
        print("kwargs:", kwargs)
    example_function(1, 2, name="XiaoMing", age=18)  # 输出: args: (1, 2) kwargs: {'name': 'XiaoMing', 'age': 18}

    示例2:

    def example(*args, **kwargs):
        print("args:", args)
        print("kwargs:", kwargs)
    
    
    example(1, 2, method='GET', url='https://www.baidu.com')

    运行结果:

      args: (1, 2)
      kwargs: {'method': 'GET', 'url': 'https://www.baidu.com'}

    示例3:

    def example(*args, **kwargs):
        print("args:", args)
        print("kwargs:", kwargs)
    
    
    example('GET', 'https://www.baidu.com', data={"user": "byhy", "password": "88888888"})

    运行结果:

      args: ('GET', 'https://www.baidu.com')
      kwargs: {'data': {'user': 'byhy', 'password': '88888888'}}



posted @ 2024-12-22 21:16  Avicii_2018  阅读(6)  评论(0编辑  收藏  举报