【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个位置参数,并且*之后的所有内容只能作为关键字参数传递。
推荐阅读
- Python中如何使用全局变量(求实例解释)
- Python如何通过引用传递变量(python有引用传递吗?)
- Python有什么方法将列表分割成大小均匀的块(求使用实例)
- Python如何复制或克隆一个list列表(有哪些方式?求详细解释和实例)
- 不明白Python的切片符号,如何更好地理解Python的切片()
- 前端开发JavaScript常见开发问题和面试题汇总(问题+答案详解)
- C语言简明教程(三)(GNU GCC、LLVM Clang和开发环境部署)
- 看门狗(军团)
- 后记 – 看门狗2