Python中函数的星号和双星号参数是什么(有什么作用?)

【Python中函数的星号和双星号参数是什么(有什么作用?)】Python中函数的*星号和**双星号参数是什么?有什么作用?下面方法中,带有*星号和**双星号的参数是什么意思?

def foo(param1, *param2): def bar(param1, **param2):

*args和**kwargs是一种常见的习惯用法,允许函数有任意数量的参数,如Python文档中定义函数的更多部分所述,args将把所有函数参数作为一个元组提供给你
In [1]: def foo(*args): ...:for a in args: ...:print a ...: ...:In [2]: foo(1) 1In [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

在python3中,可以在赋值的左侧使用*l(扩展的迭代解压),不过在这个上下文中它给出的是一个列表而不是一个元组
first, *rest = [1,2,3,4] first, *l, last = [1,2,3,4]

Python 3还添加了新的语义
def func(arg1, arg2, arg3, *, kwarg1, kwarg2): pass

这样的函数只接受3个位置参数,并且*之后的所有内容只能作为关键字参数传递。

    推荐阅读