Python中的函数调用与c++不同的是将this指针直接作为self当作第一个形参进行处理,从而将静态函数与实例方法的调用形式统一了起来。在实际编程过程中,可以通过传递函数的地址、函数的形参的方式将所有函数(包括静态函数、类实例函数)的调用用统一的方式表达出来,方便统一接口和抽象。

待传递的2个函数如下:

class Operation:

 @staticmethod
 def close_buy():
  """
  :return:
  """
  print("test event")
  print(Operation.i)
  Operation.i += 1

 def exp(self, para=1):
  try:
   self.j = 0
   print("exp")
   print(self.j)
   self.j += para
   print(self.j)
  except Exception as e:
   print(e.__str__())

如上述代码中的两个方法,都想通过函数地址、函数参数的形式进行传递,方便统一调用接口。调用形式如下

def func_exec(call, para):
 """
 调用函数
 :param call: 函数指针
 :param para: 参数元组
 :return:
 """
 return call(*para)

此时确保para是多个实参组成的元组即可。通过*将元组打散成多个单独的参数。

而传递的调用方式也很简单,如下所示:

func_exec(Operation.close_buy,tuple())
func_exec(Operation.exp,(Operation(),3))

func_exec(Operation.exp,(Operation(),3))中的第二个参数为一个元组,由一个对象实例和一个整形参数组成。对象实例此处用的是新建的一个对象,在别处也可用self将当前对象传递进去。从而实现了特殊对象实例函数的传递。

看一些Python api全程经常会碰到如下代码:

 p = Process(target=f, args=('bob',))

这里其实有一个单个参数打包成元组的技巧。比如上面的'bob'是一个字符串做为函数的参数,如果直接强制类型转换成tuple,如tuple(‘bol')会将字符串转换了元组也即('b','o'),明显与预期的不符合,而如果就写成(‘bob')是不会转换成元组的,参数仍然是一个字符串类型,而加了一个”,”之后就确保将其转换成了一个元组。

所以,以后看见许多函数参数中带个多余的”,”,千万不要以为这个逗号是多余的啊,少不得呢,人家那么写都不是没有道理的啊。

总结

1、散态传递参数

func(*arg)

2、打包传递参数

func( arg=tuple())
{
 func_exe(*arg)
}

注意实际函数调用时对参数进行解包。

3、单个参数打包元组

args=('bob',)

以上这篇关于Python形参打包与解包小技巧分享就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

标签:
Python,形参,打包,解包

免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
白云城资源网 Copyright www.dyhadc.com

评论“关于Python形参打包与解包小技巧分享”

暂无“关于Python形参打包与解包小技巧分享”评论...

《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线

暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。

艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。

《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。