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)
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
在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个位置参数,并且*之后的所有内容只能作为关键字参数传递。
评论前必须登录!
注册