参数arg、*args、**kwargs三个的区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了参数arg、*args、**kwargs三个的区别相关的知识,希望对你有一定的参考价值。

参考技术A

arg:单个的参数
*args: 将参数(一般为未命名参数或者叫位置参数)打包成元祖类型的给函数使用
* kwargs: 将参数(一般是命名参数或者叫关键字参数)打包成字典形式
args和
kwargs都是不定长参数,可以传0或者更多的参数
举例:
*args:

**kwargs:

Python的*args与**kwargs

当Python的函数的参数不确定时,可以使用*args与**kwargs来指代不定数量的参数。

两者的区别是,*args是个tuple(元组),而**kwargs是个dict(字典)。更简单的说,就是*args不带key,**kwargs带key。

先通过代码来验证上述的结论是否正确:

def func_args(*args):
    print(type(args))

def func_kwargs(**kwargs):
    print(type(kwargs))

if __name__ == __main__:
    func_args(1, 2, 3)
    func_kwargs(a=1, b=2, c=3)

运行结果,可以明确看出args是元组,kwargs是字典

<class tuple>
<class dict>

 

接着尝试下*args的使用,实现一个函数,将传入的参数值×2后返回。因为传入的参数数量不定,所以函数返回的结果也不定。

def func_a(*args):
    return tuple(arg * 2 for arg in args)

if __name__ == __main__:
    a, b = func_a(1, 2)
    c, d = func_a(a, b)
    print(a, b, c, d)

在func_a中,返回了一个元组,利用Python元组自动解包的功能,将tuple的值分别赋值给变量a 和 b。

运行结果:

2 4 aa bb

 

以上是关于参数arg、*args、**kwargs三个的区别的主要内容,如果未能解决你的问题,请参考以下文章

args *args **kwargs区别

python args kwargs 传递参数的区别

arg,*args,**kwargs区别

Python - *args和**kwargs的区别

python-*args和**kwargs作用和区别

python函数参数*arg和**kwargs分别代表什么?