python函数动态参数调用*args(元组),**kwargs(字典)

*args,只有1个*时表示元组

一般指使用元组传入参数,在函数体中直接以元组变量的方式使用该参数

def a(*args):
    print(args, type(args))
a(1, 24, 5)
# (1, 24, 5) <class 'tuple'>

为什么不使用列表,而是用元组?

元组是是不可变,不能修改的,以防止在函数体对传入的参数意外修改。

**kwargs,2个*是表示字典

指使用字典传入参数,可以直接以字典变量的方式

def a(**args):
    print(args, type(args))


a(a=1, b=24, c=5)
# {'a': 1, 'b': 24, 'c': 5} <class 'dict'>

*args和**kwargs一起使用

def a(*args, **kwargs):
    print(args, type(args))
    print(kwargs, type(kwargs))


a(1, 34, 5, a=1, b=24, c=5)
#(1, 34, 5) <class 'tuple'>
#{'a': 1, 'b': 24, 'c': 5} <class 'dict'>

装包和拆包

在函数动态参数使用*args和**kwargs中,实际上将传入的参数打包成一个元组,字典的形式,在函数中直接调用args调用时

调用的时一个元组,kwargs则是字典,要将原来输入还原出来应该加入*和**

def a(*args, **kwargs):
    # 此处的args表示装包,即将1,34,5装包成一个元组
    print(args, type(args))  # (1, 34, 5) <class 'tuple'>
    # 拆包,在args前加入*
    print(*args)  # 1 34 5
    # 一个*时表示获取键值key
    print(*kwargs)  # a b c
    # 注意直接将字典拆开时时无法打印的,此时借助一个函数打印
    # 此时相当直接使用b(a=1,b=24,c=5)进行赋值,如果函数b中不是a,b,c会报错
    b(**kwargs)


def b(a, b, c):
    print(a)
    print(b)
    print(c)


a(1, 34, 5, a=1, b=24, c=5)

https://www.bilibili.com/video/av23945877/?p=133

猜你喜欢

转载自blog.csdn.net/qq_39124762/article/details/82111186