*args与**kwargs的区别以及如何正确使用

案例1:

def foo(*args, **kwargs):
    print(args)
    print(kwargs)


foo(1, 2, a=1)

/*结果
(1,2)
{"a":1}
*/

解析:

  • 函数*args会将传入的参数1和2封装成元组(1,2), 即args = (1, 2)
  • 函数**kwargs会将参数a=1分装分字典{"a":1}, 即kwargs = {"a":1}

 

案例2:

def foo1(*args, **kwargs):
    print(args)
    print(kwargs)


def foo(*args, **kwargs):
    foo1(args, kwargs)
    foo1(*args, **kwargs)


foo(1, 2, a=1)

/*结果:
((1, 2), {'a': 1})
{}
(1, 2)
{'a': 1}
*/

分析:

  • foo1(args, kwargs)实际上传递的参数是foo1((1, 2), {"a":1}), 所以调用foo1函数时候,(1,2), {"a":1}会被归并到元组,再加个括号上去
  • foo1(*args, **kwargs)实际上传递的参数是foo1(1, 2, a=1), 函数内部使用*args是将元组类型的args = (1, 2)解成1,2, **kwargs将字典类型的kwargs = {"a":1}解成a=1
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`*args` 和 `**kwargs` 是Python中的特殊语法,用于接受任意数量的参数。它们通常用于函数或方法的定义中,以便能够处理不同数量和类型的参数。 `*args` 表示接受任意数量的位置参数,这些参数将被打包成一个元组。以下是一个例子: ``` def my_function(*args): for arg in args: print(arg) my_function(1, 2, 3) # 输出:1 2 3 ``` 在上面的代码中,我们定义了一个名为 `my_function` 的函数,它接受任意数量的参数,并将它们作为元组打包到 `args` 中。然后,我们可以使用 `for` 循环遍历 `args` 中的所有参数并将它们打印出来。 另一方面,`**kwargs` 表示接受任意数量的关键字参数,这些参数将被打包成一个字典。以下是一个例子: ``` def my_function(**kwargs): for key, value in kwargs.items(): print(key, value) my_function(name="Alice", age=25) # 输出:name Alice, age 25 ``` 在上面的代码中,我们定义了一个名为 `my_function` 的函数,它接受任意数量的关键字参数,并将它们作为字典打包到 `kwargs` 中。然后,我们可以使用一个 `for` 循环遍历 `kwargs` 中的所有键值对并将它们打印出来。 当我们在函数或方法定义中同时使用 `*args` 和 `**kwargs` 时,它们可以接受任意数量和类型的参数。例如: ``` def my_function(*args, **kwargs): for arg in args: print(arg) for key, value in kwargs.items(): print(key, value) my_function(1, 2, 3, name="Alice", age=25) ``` 在上面的代码中,我们定义了一个名为 `my_function` 的函数,它接受任意数量的位置参数和关键字参数,并将它们打印出来。我们可以传递任意数量和类型的参数给这个函数,并且它们将被正确地处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值