Python中参数一个星号*和两个星号**有什么区别?

Python中的*args和**kwargs参数

In the following method definitions, what does the * and ** do for param2?

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

The *args, **kwargs is a common idiom to allow arbitrary number of arguments to functions as described in the section
in the Python documentation.

*args – 一个星号的参数

The
*args will give you all function parameters
:

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两个星号的参数

The **kwargs will give you all
except for those corresponding to a formal parameter as a dictionary.

In [5]: def bar(**kwargs):
   ...:     for a in kwargs:
   ...:         print a, kwargs[a]
   ...:         
   ...:         

In [6]: bar(name='one', age=27)
age 27
name one

Both idioms can be mixed with normal arguments to allow a set of fixed and some variable arguments:

def foo(kind, *args, **kwargs):
   pass

Another usage of the

*l

idiom is to
when calling a function.

In [9]: def foo(bar, lee):
   ...:     print bar, lee
   ...:     
   ...:     

In [10]: l = [1,2]

In [11]: foo(*l)
1 2

In Python 3 it is possible to use * on the left side of an assignment (
), though it gives a list instead of a tuple in this context:

first, *rest = [1,2,3,4]
first, *l, last = [1,2,3,4]

Also Python 3 adds new semantic (refer
):

def func(arg1, arg2, arg3, *, kwarg1, kwarg2):
    pass

Such function accepts only 3 positional arguments, and everything after

*

can only be passed as keyword arguments.

原文链接:https://stackoverflow.com/questions/36901/what-does-double-star-and-star-do-for-python-parameters

By Code问答

发表评论

电子邮件地址不会被公开。 必填项已用*标注

86 − 76 =