python中的*args和**kwargs

在Python中定义函数的时候,有时会看到输入参数中有*args和**kwargs,简单的说,它们都是用来存放输入的参数的,只不过存放的方式不一样。args以元祖的方式存放参数,kwargs以字典的方式存放。具体该怎么用可以看下面的一个简单的例子:

""" A simple example of *args and **kwargs.
Author: Meringue
Date: 2018/7/1
"""

"""
args: 以元祖的形式存放多个参数
kwargs:以字典的形式传递多个参数
"""

def fun1(*args):
    print("args = ", args) # 存放了所有的参数

def fun2(x, *args):
    print("x = ", x)
    print("args = ", args) # 存放了除x外所有的参数

def fun3(x, y=1, *args):
    print("x = ", x)
    print("y = ", y)
    print("args = ", args) # 存放了除x和y外所有的参数

def fun4(x, *args, y=1):
    print("x = ", x)
    print("y = ", y) # 保持默认值
    print("args = ", args) # 存放了除参数x外的所有的参数

def fun5(**kwargs):
    print("kwargs = ", kwargs) # 以字典格式存放了所有的参数

def fun6(x, **kwargs):
    print("x = ", x)
    print("kwargs = ", kwargs) # 以字典格式存放了除x外所有的参数

def fun7(x=1, **kwargs):
    print("x = ", x)
    print("kwargs = ", kwargs) # 以字典格式存放了所有的参数

def fun8(x, *args, **kwargs):
    """注意调用顺序
    """
    print("x = ", x)
    print("args = ", args)
    print("kwargs = ", kwargs) # 以字典格式存放了所有的参数

if __name__ == "__main__":
    print("fun1 result:")
    fun1(1,2,3,4,5)
    print("fun2 result:")
    fun2(1,2,3,4,5)
    print("fun3 result:")
    fun3(1,2,3,4,5)
    print("fun4 result:")
    fun4(1,2,3,4,5)
    print("fun5 result:")
    fun5(x1=1, x2=2, x3=3, x4=4, x5=5) # 调用时需要指定变量名
    print("fun6 result:")
    fun6(x=1, x2=2, x3=3, x4=4, x5=5) # 需要给定x的值
    print("fun7 result:")
    fun7(x1=1, x2=2, x3=3, x4=4, x5=5) # 可以不指定x的值(缺省值) 
    print("fun8 result:") 
    fun8(1,2,3,x1=1, x2=2, x3=3) # x=1, args=(2,3), kwargs={"x1": 1, "x2": 2, "x3": 3}

运行的结果如下:

fun1 result:
args =  (1, 2, 3, 4, 5)
fun2 result:
x =  1
args =  (2, 3, 4, 5)
fun3 result:
x =  1
y =  2
args =  (3, 4, 5)
fun4 result:
x =  1
y =  1
args =  (2, 3, 4, 5)
fun5 result:
kwargs =  {'x1': 1, 'x2': 2, 'x3': 3, 'x4': 4, 'x5': 5}
fun6 result:
x =  1
kwargs =  {'x2': 2, 'x3': 3, 'x4': 4, 'x5': 5}
fun7 result:
x =  1
kwargs =  {'x1': 1, 'x2': 2, 'x3': 3, 'x4': 4, 'x5': 5}
fun8 result:
x =  1
args =  (2, 3)
kwargs =  {'x1': 1, 'x2': 2, 'x3': 3}

相信对照上面的函数看输出的结果就能搞明白args和kwargs的用法了。

猜你喜欢

转载自blog.csdn.net/sinat_34474705/article/details/80876602