python中可变参数-args,python args kwargs 理解

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: