简述
我先来告诉你一个事实, 其实并不是必须写成args 和kwargs。 只有变量前⾯的 (星号)才
是必须的。你也可以写成var 和vars, ⽽写成args 和**kwargs只是⼀个通俗的命
名约定。 接下来我么一起聊聊。
*args解释
*args 是⽤来发送一个非键值对的可变数量的参数列表给一个函数
def test_var_args(f_arg,*args): #接受元组数据
... print("first normal arg:",f_arg)
... print("args normal:",args)
... for arg in args:
... print("another arg through *argv:",arg)
...
>>> test_var_args("yangzhi","dad","dada","dad","ddddd")
first normal arg: yangzhi
args normal: ('dad', 'dada', 'dad', 'ddddd')
another arg through *argv: dad
another arg through *argv: dada
another arg through *argv: dad
another arg through *argv: ddddd
**kwargs解释
**kwargs简单描述,它就是用于接收一个字典类型的参数
>>> def greet_me(**kwargs): #接受字典
... for key,value in kwargs.items():
... print("{}=={}".format(key,value))
...
>>> greet_me(name="yangzhi")
name==yangzhi
使⽤ *args 和 **kwargs 来调⽤函数
那现在我们将看到怎样使⽤*args和**kwargs 来调⽤⼀个函数。 假设, 你有这样⼀个⼩函数:
*args
>>> def test_args_kwargs(arg1, arg2, arg3):
... print("arg1:", arg1)
... print("arg2:", arg2)
... print("arg3:", arg3)
...
>>>
>>>
>>>
>>> args = ("yz", "hello", "world") # 定义元组变量
>>> test_args_kwargs(*args) # 调用结果如下
arg1: yz
arg2: hello
arg3: world
**kwargs
# 同一个函数
>>> def test_args_kwargs(arg1, arg2, arg3):
... print("arg1:", arg1)
... print("arg2:", arg2)
... print("arg3:", arg3)
...
# 定义键值对变量
>>> kwargs = {"arg1": "yz", "arg2": "China", "arg3":"HZ"}
>>> test_args_kwargs(**kwargs) # 调用执行得出以下结果
arg1: yz
arg2: China
arg3: HZ
列表支持
>>> args = ["yz", "hello", "world"]
>>> test_args_kwargs(*args)
arg1: yz
arg2: hello
arg3: world
总结
1. 什么时候使⽤它们,最常见的⽤例是在写函数装饰器的时候
2. *args和**kwargs可以同时在函数的定义中,但是*args必须在**kwargs前面。