我试图理解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和?)
由于
答案 0 :(得分:8)
当您使用两个星号时,通常会将它们称为**kwargs
以获取关键字参数。它们对于在大型程序中从函数传递参数非常有帮助。
关键字参数的一个好处是,修改代码非常容易。让我们说在下面的例子中你也确定参数cube
也是相关的。您唯一需要做的就是在if statement
中添加一个my_func_2
,并且您不需要为每个调用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