在Python中*args和**args有什么区别?

8 浏览
0 Comments

在Python中*args和**args有什么区别?

这个问题已有答案:

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

我正在尝试理解Python函数定义中*args和** args之间的区别。 在下面的示例中,*args用于打包成元组并计算总和。

>>> def add(*l):
... sum = 0
... for i in l:
... sum+=i
... return sum ...
>>> add(1,2,3)
6
>>> l = [1,2,3]
>>>add(*l)
6

对于** args,

>>> def f(**args):
...     print(args)
... 
>>> f()
{}
>>> f(de="Germnan",en="English",fr="French")
{'fr': 'French', 'de': 'Germnan', 'en': 'English'}
>>> 

我看到它接收参数并将其转换为字典。但我不明白在使用** args时可以帮助什么实用程序或其他事情。实际上,我不知道*args和**args被称为(vararg和?)

谢谢

admin 更改状态以发布 2023年5月22日
0
0 Comments

当您使用两个星号时,通常称其为关键字参数**kwargs。它们非常有助于在大型程序中从函数传递参数到函数。

关键字参数的一个好处是,修改您的代码非常容易。假设在下面的示例中,您还决定参数cube也是相关的。唯一需要做的事情就是在my_func_2中添加一个if语句,并且您不需要向每个调用my_func_2的函数添加参数(只要该函数具有**kwargs)。

下面是一个简单而愚蠢的示例,但我希望它有所帮助:

def my_func_1(x, **kwargs):
    if kwargs.get('plus_3'):
        return my_func_2(x, **kwargs) + 3
    return my_func_2(x, **kwargs)
def my_func_2(x, **kwargs):
    #Imagine that the function did more work
    if kwargs.get('square'):
        return x ** 2
    # If you decided to add cube as a parameter 
    # you only need to change the code here:
    if kwargs.get('cube'):
        return x ** 3
    return x

示例:

>>> my_func_1(5)
5
>>> my_func_1(5, square=True)
25
>>> my_func_1(5, plus_3=True, square=True)
28
>>> my_func_1(5, cube=True)
125

0