理解Python双星和单星对参数的作用 理解Python的参数传递 理解Python中的作用域规则 理解Python中双星(**)和单星(*)对参数的作用 传递多个参数可以使用*args,或者**kwargs *args参数为一个元组 In [1]: def foo(*args): ...: for a in args: ...: print a ...: ...: In [2]: foo(1) 1 In [4]: foo(1,2,3) 1 2 3 **kwargs会给你所有的 关键字参数除了那些与作为字典的形式参数。 In [5]: def bar(**kwargs): ...: for a in kwargs: ...: print a, kwargs[a] ...: ...: In [6]: bar(name='one', age=27) age 27 name one 这两个习语都可以与普通参数混合,以允许一组固定和一些变量参数: def foo(kind, *args, **kwargs): pass *l习惯用法的另一个用法是在调用函数时解包参数列表。 In [9]: def foo(bar, lee): ...: print bar, lee ...: ...: In [10]: l = [1,2] In [11]: 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也增加了新的语义(参考PEP 3102): def func(arg1, arg2, arg3, *, kwarg1, kwarg2): pass 这样的函数只接受3个位置参数,后面的所有内容*只能作为关键字参数传递。 理解Python的参数传递 理解Python中的作用域规则