在Python中*args和**args有什么区别?
在Python中*args和**args有什么区别?
这个问题已有答案:
我正在尝试理解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日
当您使用两个星号时,通常称其为关键字参数**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