difference bewteen *args and **args in python?
本问题已经有最佳答案,请猛点这里访问。
我试图理解在Python中函数定义中,*args和**args之间的区别。在下面的示例中,*args将打包成一个元组并计算和。
1 2 3 4 5 6 7 8 9 10 | >>> 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 |
对于**,
1 2 3 4 5 6 7 8 | >>> def f(**args): ... print(args) ... >>> f() {} >>> f(de="Germnan",en="English",fr="French") {'fr': 'French', 'de': 'Germnan', 'en': 'English'} >>> |
我看到它接受参数并将其转换成字典。但我不理解实用程序或其他在使用**参数时可能有用的东西。实际上,我不知道什么是*args和**args(vararg和?)
谢谢
当你使用两个星号时,你通常称它们为
关键字参数的一个好处是,修改代码非常容易。假设在下面的示例中,您还决定了参数
下面是一个简单而愚蠢的例子,但我希望它能有所帮助:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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 |
演示:
1 2 3 4 5 6 7 8 | >>> 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 |