*args和
**kwargs是一种常见的成语,以允许参数,以作为部分所述功能的任意数量的多个上定义函数 Python文档英寸
该
*args给你的所有函数参数为一个元组:
def foo(*args): for a in args: print(a) foo(1)# 1foo(1,2,3)# 1# 2# 3
该
**kwargs会给你所有的 关键字参数除了那些与作为字典的形式参数。
def bar(**kwargs): for a in kwargs: print(a, kwargs[a]) bar(name='one', age=27)# age 27# name one
这两个习惯用法都可以与普通参数混合使用,以允许使用一组固定参数和一些可变参数:
def foo(kind, *args, **kwargs): pass
也可以以其他方式使用此方法:
def foo(a, b, c): print(a, b, c)obj = {'b':10, 'c':'lee'}foo(100,**obj)# 100 10 lee*l习惯用法的另一种用法是在调用函数时解压缩参数列表。
def foo(bar, lee): print(bar, lee)l = [1,2]foo(*l)# 1 2
在Python 3中,可以*l在分配的左侧使用(Extended Iterable Unpacking),尽管在这种情况下它提供的是列表而不是元组:
first, *rest = [1,2,3,4]first, *l, last = [1,2,3,4]
Python 3还添加了新的语义):
def func(arg1, arg2, arg3, *, kwarg1, kwarg2): pass
该函数仅接受3个位置参数,之后的所有内容*只能作为关键字参数传递。



