关于Python形参打包与解包小技巧分享


Posted in Python onAugust 24, 2019

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 相关文章推荐
下载安装setuptool和pip linux安装pip    
Jan 24 Python
Python实现检测服务器是否可以ping通的2种方法
Jan 01 Python
python计算一个序列的平均值的方法
Jul 11 Python
利用aardio给python编写图形界面
Aug 21 Python
python3库numpy数组属性的查看方法
Apr 17 Python
利用Tensorflow构建和训练自己的CNN来做简单的验证码识别方式
Jan 20 Python
python轮询机制控制led实例
May 03 Python
通过Python扫描代码关键字并进行预警的实现方法
May 24 Python
UI自动化定位常用实现方法代码示例
Oct 27 Python
Django通过设置CORS解决跨域问题
Nov 26 Python
Python 无限级分类树状结构生成算法的实现
Jan 21 Python
浅谈Python项目的服务器部署
Apr 25 Python
python-序列解包(对可迭代元素的快速取值方法)
Aug 24 #Python
对python中的装包与解包实例详解
Aug 24 #Python
Python3进制之间的转换代码实例
Aug 24 #Python
Python实现朴素贝叶斯的学习与分类过程解析
Aug 24 #Python
FFrpc python客户端lib使用解析
Aug 24 #Python
用Python将Excel数据导入到SQL Server的例子
Aug 24 #Python
python 根据网易云歌曲的ID 直接下载歌曲的实例
Aug 24 #Python
You might like
几个有用的php字符串过滤,转换函数代码
2012/05/01 PHP
用来解析.htgroup文件的PHP类
2012/09/05 PHP
PHP实现APP微信支付的实例讲解
2018/02/10 PHP
Javascript中call和apply函数的比较和使用实例
2015/02/03 Javascript
Javascript数组Array基础介绍
2016/03/13 Javascript
JQuery的Pager分页器实现代码
2016/05/03 Javascript
JS使用单链表统计英语单词出现次数
2016/06/16 Javascript
xmlplus组件设计系列之路由(ViewStack)(7)
2017/05/02 Javascript
jQuery使用JSONP实现跨域获取数据的三种方法详解
2017/05/04 jQuery
bootstrap table实现双击可编辑、添加、删除行功能
2017/09/27 Javascript
jQuery实现表单动态添加数据并提交的方法
2018/07/19 jQuery
Vue项目自动转换 px 为 rem的实现方法
2018/10/29 Javascript
vue+iview动态渲染表格详解
2019/03/19 Javascript
Vue 引入AMap高德地图的实现代码
2019/04/29 Javascript
微信小程序登录对接Django后端实现JWT方式验证登录详解
2019/07/29 Javascript
JavaScript 作用域实例分析
2019/10/02 Javascript
Vue实现按钮级权限方案
2019/11/21 Javascript
Vue分页效果与购物车功能
2019/12/13 Javascript
vue2.0实现列表数据增加和删除
2020/06/17 Javascript
Vue中 axios delete请求参数操作
2020/08/25 Javascript
[44:04]OG vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
通过C++学习Python
2015/01/20 Python
Django实现图片文字同时提交的方法
2015/05/26 Python
python 写入csv乱码问题解决方法
2016/10/23 Python
Python中第三方库Requests库的高级用法详解
2017/03/12 Python
Python图像处理之识别图像中的文字(实例讲解)
2018/05/10 Python
Python装饰器语法糖
2019/01/02 Python
python二进制文件的转译详解
2019/07/03 Python
django实现模板中的字符串文字和自动转义
2020/03/31 Python
Myprotein法国官网:欧洲第一运动营养品牌
2019/03/26 全球购物
群众路线教育党员自我剖析材料
2014/10/06 职场文书
2014年合同管理工作总结
2014/12/02 职场文书
2015年安置帮教工作总结
2015/05/22 职场文书
户外拓展训练感想
2015/08/07 职场文书
SQLServer2008提示评估期已过解决方案
2021/04/12 SQL Server
html中两种获取标签内的值的方法
2022/06/16 jQuery