个性化阅读
专注于IT技术分析

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)
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个位置参数,并且*之后的所有内容只能作为关键字参数传递。

赞(0)
未经允许不得转载:srcmini » Python中函数的星号和双星号参数是什么?有什么作用?

评论 抢沙发

评论前必须登录!