简单叙述
在Python的代码中,这两个单词args和kwargs很常见,前面经常带一个或两个星号。
args是arguments的缩写,位置参数kwargs是keyword arguments的缩写,表示关键字参数注。 这实际上是Python可变参数的两种形式,*args必须放在**kwargs之前。 因为位置参数在关键字参数之前。
从以下五个方面理解
的角色*args的用法**的角色**kwargs的用法实例
*的作用
通过一个函数调用理解“*”的角色定义包含# # # 3个位置参数的函数
德福(A,B,C ) :
.打印a,b,c
传递# # # 3个位置参数,调用该函数
fun (1,2,3 ) )。
23 )输出在此定义包含3个整数的数列,使用‘*’
var=[ 1,2,3 ]
fun(*var ) )。
13#输出' * '做了什么? 将数列‘var’的数值分解作为位置参数,将这些位置参数传递给函数‘fun’进行调用。
这意味着,由于var=[ 1,2,3 ],因此fun(*var )与fun ) 1,2,3 )是等价的
注: *var和位置参数可以混合使用
*args的用法
'*args '用函数定义做什么? 接受元组作为位置参数,而不是常用的参数列表。 其中“args”是元组。“args”与“一般参数列表”混合使用
# #在函数定义中,参数‘a’表示‘一般参数列表’
deffun(a,*args ) :
.打印(航空,航空) ) ) )。
.打印(数组、数组) )。
# #‘args’接受通常参数以外的位置参数作为元组
fun (11,12,13,14 ) )。
国际航空运输协会
args is (12,13,14 )注:“args”既然是元组,我们就可以遍历它。
通过一个函数调用理解
**的作用
「**”的作用#3定义参数的函数
德福(A,B,C ) :
.打印(a,b,c ) )。
.
func (1,2,3 ) )。
1 2 3
fun(a=1,b=2,c=3) )。
23 )使用3「**”调用函数。 这个方法需要词典。
var={'b' : 2,' c' : 3}
fun(1,**var ) ) )。
13注(通过函数调用) ),需要元组; 要在函数调用中使用“**”,需要词典
“**”做了什么? 解除字典的包装,并将字典中的数据项作为键值参数传递给函数。 因此,fun(1,**var )等效于fun ) 1,b=2,c=3)。
**kwargs的用法
函数定义中“**kwargs”是什么意思? kwargs接受常规参数列表以外的键值参数词典。 其中,“kwargs”是词典。重新定义函数:
deffun(a,* *千瓦) :
.打印(航空,航空) ) ) )。
.打印(在此基础上输入weexpectkwargs ' b '和' c ' ) )。
.打印(bis,千瓦) ) b ) )
.打印(CIS,千瓦) ) c ) )
.
fun(1,b=3,c=5) )。
甲级联赛
在weexpectkwargs ' b '和' c '中使用此功能
国际空间站
c is 5注:可以在词典前面使用“**”解除词典的包装,并将词典的数据项作为键值参数传递。
实例
用应用例说明“kwargs”、“kwargs”的应用场景和为什么使用它。在继承类和重写方法时,使用“*args”和“**kwargs”将接收的位置参数和键值参数传递给父类方法,以便通过实例更好地理解。
类模型(对象) :
. def _ init _ (自己,名称) :
.自助.名称=名称
. def save (自我,强制_更新=假,强制_插入=假) :
. ifforce _更新声明_插入:
. Raisevalueerror (Cannotperformbothoperations ) )。
. if强制更新:
.打印(更新索引记录)。
. if强制插入:
. print (创建新的类)。 类有) Model )的行为,但是该类的对象在保存之前会检查一些条件。 这个新类继承“model”,改写“model”的“save”
等级模型(模型) :
. def save (自,*数组,* *千瓦) :
. if自己名称==' ABCD ' :
. super (子模型,自己) .保存)余量,* *千瓦() ) ) ) ) ) ) )。) ) ) ) ) ) ) ) ) )但值。) )
. else:
. return None实际对应的保存动作在“model”的“save”方法中发生。 因此,我们将调用子类的“save”方法,而不是“model”。 子类的ChildModel的“save”接收任意父类的save“”所需的参数,并传递给父类的方法。 因此,“保存”方法的子类的参数列表有“*args”和“**kwargs”,可以接受任何位置参数或键值参数,普通参数列表除外。
然后创建ChildModel实体并保存:
c=儿童模型(ABCD ) ) )。
c.save (力插入=真) )。
创建新记录
c .保存(强制_更新=真) )。
更新现有记录现在将键值参数传递给子类的save (要调用的对象的save )方法。