python function with variadic arguments or keywords(dict) 可变参数与关键字参数

时间:2021-12-10 23:21:00

*args 表示任意个普通参数,调用的时候自动组装为一个tuple

**kwags 表示任意个字典类型参数, 调用的时候自动组装成一个dict

args和kwags是两个约定俗成的用法。

变长参数可以用*args来解包

>>> args = [3,6]
>>> list(range(*args))
[3, 4, 5]

>>> def f1(*args, **kwargs):
...    print args, kwargs
...
>>> l = [1, 2, 3]
>>> t = [4, 5, 6]
>>> d = {'a':7, 'b':8, 'c':9}

>>> f1()
() {}

>>> f1(1,2,3)
(1, 2, 3) {}

>>> f1(1,2,3,'hello')
(1, 2, 3, 'hello') {}

>>> f1(a=1,b=2,c=3)
() {'a': 1, 'c': 3, 'b': 2}

>>> f1(a=1,b=2,c=3,d='hello')
() {'a': 1, 'c': 3, 'b': 2, 'd': 'hello'}

>>> f1(1,2,3,a=1,b=2,c=3)
(1, 2, 3) {'a': 1, 'c': 3, 'b': 2}

>>> f1(*l)
(1, 2, 3) {}
>>> f1(*t)
(4, 5, 6) {}
>>> f1(**d)
() {'a': 7, 'c': 9, 'b': 8}

>>> f1(1,2,*t)
(1, 2, 4, 5, 6) {}
>>> f1(1,2,*l)
(1, 2, 1, 2, 3) {}

>>> f1(1,2,*t,s='world',**d)
(1, 2, 4, 5, 6) {'a': 7, 'c': 9, 'b': 8, 's': 'world'}

>>> def f2(arg1, arg2, *args, **kwargs):
...     print arg1, arg2, args, kwargs
...
>>> f2(1,2,3,a=1,b=2,c=3)
1 2 (3,) {'a': 1, 'c': 3, 'b': 2}
>>> f2(1,2,*t)
1 2 (4, 5, 6) {}
>>> f2(1,2,*t,s='hello',**d)
1 2 (4, 5, 6) {'a': 7, 'c': 9, 'b': 8, 's': 'hello'}