当前位置: 首页 > 后端技术 > Python

-args和--kwargs在Python中的用法

时间:2023-03-26 00:51:25 Python

在某些代码中总会看到*args和**kwargs。我不知道如何使用它们。今天整理了一下:首先,语法是*和**,但是Using*args和**kwargs只是一个规则,为了方便,但并不是必须要用。当您不确定函数中将传递多少参数时,可以使用*args。例如,它可以传递任意数量的参数:>>>defprint_everything(*args):forcount,thinginenumerate(args):...print'{0}.{1}'.format(count,thing)...>>>print_everything('apple','banana','cabbage')0.apple1.banana2.cabbage类似地,**kwargs允许您使用之前未定义的参数名称:>>>deftable_things(**kwargs):...forname,valueinkwargs.items():...print'{0}={1}'.format(name,value)...>>>table_things(apple='fruit',cabbage='vegetable')cabbage=vegetableapple=fruit你也可以混合它们。命名参数首先获取参数值,然后将所有其他参数传递给*args和**kwargs。命名参数在列表中排在第一位。例如:deftable_things(titlestring,**kwargs)*args和**kwargs可以同时在函数的定义中,但是*args必须在**kwargs之前。您还可以在调用函数时使用*和**语法。例如:>>>defprint_three_things(a,b,c):...print'a={0},b={1},c={2}'.format(a,b,c)...>>>mylist=['aardvark','baboon','cat']>>>print_three_things(*mylist)a=aardvark,b=baboon,c=cat如你所见,它可以传递一个列表(或元组)并解压它们。请注意,它们必须与函数中的参数相匹配。当然你也可以在函数定义或者函数调用中使用*。推荐文章:Python中的元类到底是什么?这篇文章可能是最清楚的。Python中@staticmethod和@classmethod的区别