1

*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


runfish
4 声望0 粉丝

下一篇 »
find