使用*args和**kwargs[复制]

  • 问题:
  • 所以我很难理解*args**kwargs

    到目前为止,我了解到:

    我不知道这对什么编程任务有帮助。在

    也许:

    我想把列表和字典作为函数的参数同时作为通配符输入,这样我就可以传递任何参数了?在

    是否有一个简单的例子来解释如何使用*args**kwargs?在

    我发现的教程也只使用了“*”和一个变量名。在

    *args**kwargs只是占位符,还是在代码中确切使用*args**kwargs?在

  • 答案:
  • The syntax is the * and **. 名称*args**kwargs只是约定的,但没有硬性要求使用它们

    当您不确定传递给函数的参数有多少时,可以使用*args,也就是说,它允许您向函数传递任意数量的参数。例如:

    >>> def print_everything(*args):
    for count, thing in enumerate(args):
    ... print( '{0}. {1}'.format(count, thing))
    ...
    >>> print_everything('apple', 'banana', 'cabbage')
    0. apple
    1. banana
    2. cabbage

    类似地,**kwargs允许您处理事先未定义的命名参数:

    >>> def table_things(**kwargs):
    ... for name, value in kwargs.items():
    ... print( '{0} = {1}'.format(name, value))
    ...
    >>> table_things(apple = 'fruit', cabbage = 'vegetable')
    cabbage = vegetable
    apple = fruit

    您也可以将它们与命名参数一起使用。显式参数首先获取值,然后将所有其他参数传递给*args**kwargs。命名参数列在列表的第一位。例如:

    def table_things(titlestring, **kwargs)

    也可以在同一个函数定义中使用这两个参数,但*args必须出现在**kwargs之前

    在调用函数时,也可以使用***语法。例如:

    >>> def print_three_things(a, b, c):
    ... print( 'a = {0}, b = {1}, c = {2}'.format(a,b,c))
    ...
    >>> mylist = ['aardvark', 'baboon', 'cat']
    >>> print_three_things(*mylist)
    a = aardvark, b = baboon, c = cat

    正如您在本例中看到的,它获取项的列表(或元组)并将其解压缩。这样它就可以将它们与函数中的参数相匹配。当然,在函数定义和函数调用中都可以有一个*