1. * args和** kwargs
我发现大多数新的python程序员都很难找出* args和** kwargs魔术变量。那他们是什么?首先,让我告诉您,不必编写* args或** kwargs。只需要*(星号)。您可能还编写了* var和** vars。编写* args和** kwargs只是一个惯例。因此,现在让我们首先看一下* args。
1.1。* args的用法
* args和** kwargs通常在函数定义中使用。* args和** kwargs允许您将未指定数量的参数传递给函数,因此在编写函数定义时,您无需知道将有多少参数传递给函数。* args用于将非关键字的可变长度参数列表发送到函数。这是一个示例,可以帮助您获得一个清晰的主意:
deftest_var_args(f_arg,*argv):print("first normal arg:",f_arg)forarginargv:print("another arg through *argv:",arg)test_var_args('yasoob','python','eggs','test')
这将产生以下结果:
firstnormalarg:yasoobanotherargthrough*argv:pythonanotherargthrough*argv:eggsanotherargthrough*argv:test
我希望这可以消除您的任何困惑。所以现在让我们来谈谈** kwargs
1.2。** kwargs的用法
** kwargs允许您将关键字的变长参数传递给函数。如果要处理函数中的命名参数,则应使用** kwargs 。这是一个示例,可以帮助您:
defgreet_me(**kwargs):forkey,valueinkwargs.items():print("{0} = {1}".format(key,value))>>>greet_me(name="yasoob")name=yasoob
因此,您可以看到我们如何处理函数中的关键字参数列表。这只是** kwargs的基础知识,您可以看到它多么有用。现在让我们谈谈如何使用* args和** kwargs调用带有参数列表或字典的函数。
1.3。使用* args和** kwargs调用函数
因此,在这里我们将看到如何使用* args和** kwargs调用函数。只要考虑一下您有这个小功能:
deftest_args_kwargs(arg1,arg2,arg3):print("arg1:",arg1)print("arg2:",arg2)print("arg3:",arg3)
现在,您可以使用* args或** kwargs将参数传递给此小函数。方法如下:
# first with *args>>>args=("two",3,5)>>>test_args_kwargs(*args)arg1:twoarg2:3arg3:5# now with **kwargs:>>>kwargs={"arg3":3,"arg2":"two","arg1":5}>>>test_args_kwargs(**kwargs)arg1:5arg2:twoarg3:3
使用* args ** kwargs和正式args的顺序
因此,如果要在函数中使用所有这三个函数,则顺序为
some_func(fargs,*args,**kwargs)
1.4。什么时候使用它们?
这实际上取决于您的要求。最常见的用例是在制作函数装饰器时(在另一章中讨论)。此外,它也可以用于猴子修补。猴子修补意味着在运行时修改一些代码。请考虑您有一个类,get_info其中包含一个名为的函数,该函数调用API并返回响应数据。如果要测试它,可以用一些测试数据替换API调用。例如:
importsomeclassdefget_info(self,*args):return"Test data"someclass.get_info=get_info
网友评论