python中可变参数*args,python args kwargs 理解
仅用于研究参考。
* args * * kwargs有什么用?首先你要知道,有时候参数再传入的时候是无法确定的。
例如多重继承的情况。
例子如下:
def test1(a,b,*args,**kwargs):
打印( a=%s % a
打印( b=%s % b )
print(args=,args)
打印( kwargs=,kwargs)
测试1 (11,22,33,44,55,66,fatboss={name: fatty boss },hobby=斗地主)执行如下:
[root @ server 01 test]# python 3 test3 . py
a=11
b=22
args=(33,44,55,66)
Kwargs={fatboss: {name :胖老板 },爱好:斗地主 }
【root @ server 01 test】#从上面的结果可以看出,args可以把多余的数放入一个tuple中,而后面的是由kwargs放入字典中的。
想想吧。如果最后写了一些数字,没能形成键值对,会报错吗?还是直接加入args的元组?
按如下方式运行:
[root @ server 01 test]# python 3 test3 . py
文件“test3.py”,第8行
测试1 (11,22,33,44,55,66,fatboss={name: fatty boss },hobby=斗地主,77)
^
语法错误:位置参数跟在关键字参数后面
[root@server01 test]#果然,报告了一个错误。
说明:dict字典形成后,不能再把非键值对的参数放在后面,否则无法形成字典会报错。
问题:在test1中args和kwargs的参数可以再次写入另一个test2方法吗?def test2(a,b,*args,**kwargs):
打印(========这是test2========)
打印( a=%s % a
打印( b=%s % b )
print(args=,args)
打印( kwargs=,kwargs)
def test1(a,b,*args,**kwargs):
打印( a=%s % a
打印( b=%s % b )
print(args=,args)
打印( kwargs=,kwargs)
#将参数传入test2
测试2(a,b,args,kwargs)
Test1 (11,22,33,44,55,66,fatboss={name: fat boss },hobby=斗地主)从上面的代码来看,在Test1的方法中,如果将args和kwargs直接传入test2,那么上述的结果会是什么?
跑去看一看:
[root @ server 01 test]# python 3 test3 . py
a=11
b=22
args=(33,44,55,66)
Kwargs={fatboss: {name :胖老板 },爱好:斗地主 }
=======这是测试2=========
a=11
b=22
Arg=((33,44,55,66),{ 胖老板:{ 名字:胖老板 },爱好:斗地主 })
kwargs={}
【root @ server 01 test】#可以看到test1中kwargs的内容都被写入了test2中args的元组中。
Arg=((33,44,55,66),{FATBOSS: {NAME: FATBOSS }, hobby :斗地主 })好了,问题来了。
可以根据args和kwargs的原始参数写test2吗?
解决办法
#将参数传入test2
Test2(a,b,*args,**kwargs)运行如下:
[root @ server 01 test]# python 3 test3 . py
a=11
b=22
args=(33,44,55,66)
Kwargs={fatboss: {name :胖老板 },爱好:斗地主 }
=======这是测试2=========
a=11
b=22
args=(33,44,55,66)
Kwargs={fatboss: {name :胖老板 },爱好:斗地主 }
[root@server01 test]#那么为什么会出现这种情况呢?
因为在test1中,使用args时,变量是(33,44,55,66),使用kwargs时,变量是{ fatboss :{ name : fat boss }, hobby :斗地主 }那么这时,原来传入的变量Test1 (11 45,55,66,fatboss={name: fatboss },hobby=斗地主)只有11,22,33,44,55,66,fat boss
结果是正确的。
而*args和**kwargs只是将原来传入的值再次传入test2。
关注微信微信官方账号,回复【数据】,Python,PHP,JAVA,web,即可获取Python,PHP,JAVA,前端等视频数据。
来自海洋的渔夫原创作品,
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。