可变参数与可变关键字

args用于函数定义,表示可以将*不定数量的参数传递给一个函数。

args发送⼀个*非键值对的可变数量的参数列表给⼀个函数。
举个栗子:

  1. def test_var_args(f_arg, *argv):
  2. print("first normal arg:", f_arg)
  3. for arg in argv:
  4. print("another arg through *argv:", arg) # 有几个就输出几个
  5. test_var_args('yasoob', 'python', 'eggs', 'test')

输出的结果为:

  1. first normal arg: yasoob
  2. another arg through *argv: python
  3. another arg through *argv: eggs
  4. another arg through *argv: test

kwargs 允许将不定长度的键值对**作为参数传递给⼀个函数。

如果想要在⼀个函数里处理带名字的参数, 应该使用kwargs。
kwargs和arg的区别在于,*kargs必须接受类似arg=val类型的键值对
举两个栗子:

  1. def greet_me(**kwargs):
  2. # 不定的键值对,以dictionary的形式接收数据对象
  3. for key, value in kwargs.items():
  4. print("{0} == {1}".format(key, value))
  5. >>> greet_me(name="yasoob")
  6. name == yasoob
  1. def foo(**kwargs): # 以dictionary的形式接收数据对象
  2. print(kwargs)
  3. >>> foo(a=1, b=2, c=3) # 用键值对写
  4. {'a': 1, 'c': 3, 'b': 2}

那么如果想在函数里同时使用这三种参数, 顺序是这样的:

  1. some_func(fargs, *args, **kwargs) # 先是定下来的,然后是可变参数,最后是可变关键字