*args和**kwargs
很多程序员往往需要花大量时间来搞懂这两个魔法变量。
- 不是必须写成*args和**kwargs。只有前面的才是必须的,也可以写成var和**vars。
- 写成*args和**kwargs是一个通俗的命名约定。
*args的用法
- 用于函数定义。
- 可以将不定数量的参数传递给一个函数。
- *args是用来发送一个非键值对的可变数量的参数列表给一个函数。
demo
def test_args(test_arg, *args):
print("第一个参数 =", test_arg)
for arg in args:
print("arg =", arg)
test_args("python", "c++", "java", "c", "javaweb")
运行结果:
第一个参数 = python
arg = c++
arg = java
arg = c
arg = javaweb
**kwargs的用法
- 用于函数定义。
- 可以将不定数量的参数传递给一个函数。
- **kwargs允许你将不定长度的键值对,作为参数传递给一个函数。
- 如果你想要在一个函数里面处理带名字的参数,应该使用**kwargs。
demo
def test_kwargs(**kwargs):
for key, value in kwargs.items():
print("{0} == {1}".format(key, value))
test_kwargs(name1="java", name2="python")
运行结果:
name1 == java
name2 == python
使用args和*kwargs来调用函数
demo
def fun_args(arg1, arg2, arg3):
print("arg1 =", arg1)
print("arg2 =", arg2)
print("arg3 =", arg3)
使用*args来调用函数
args = ("c", "java", "c++")
fun_args(*args)
*args运行结果:
arg1 = c
arg2 = java
arg3 = c++
使用**kwargs来调用函数
kwargs = {"arg3": "c++", "arg1": "c", "arg2": "java"}
fun_args(**kwargs)
**kwargs运行结果:
arg1 = c
arg2 = java
arg3 = c++
标准参数与*args、**kwargs在使用时的顺序func(arg0, *args, **kwargs)
啥时候使用它们
- 最常见:在写函数装饰器的时候
- 用来做猴子补丁(monkey patching)
以上代码实测于python版本:3.7.0
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。