关于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 相关文章推荐
跟老齐学Python之私有函数和专有方法
Oct 24 Python
Python科学计算之NumPy入门教程
Jan 15 Python
Python多进程原理与用法分析
Aug 21 Python
详解python列表生成式和列表生成式器区别
Mar 27 Python
Python基于BeautifulSoup和requests实现的爬虫功能示例
Aug 02 Python
Python获取时间范围内日期列表和周列表的函数
Aug 05 Python
Django配置文件代码说明
Dec 04 Python
Python连接字符串过程详解
Jan 06 Python
PyCharm第一次安装及使用教程
Jan 08 Python
python第三方库学习笔记
Feb 07 Python
Django web自定义通用权限控制实现方法
Nov 24 Python
教你怎么用python实现字符串转日期
May 24 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的数组中提高元素查找与元素去重的效率的技巧解析
2016/03/03 PHP
js的表单操作 简单计算器
2011/12/29 Javascript
将input file的选择的文件清空的两种解决方案
2013/10/21 Javascript
深入理解Javascript中this的作用域
2014/08/12 Javascript
javascript实现炫酷的拖动分页
2015/05/11 Javascript
详解JavaScript对象和数组
2015/12/03 Javascript
JavaScript trim 实现去除字符串首尾指定字符的简单方法
2016/12/27 Javascript
jQuery插件zTree实现获取一级节点数据的方法
2017/03/08 Javascript
ES6中的箭头函数实例详解
2017/04/06 Javascript
Bootstrap Tree View简单而优雅的树结构组件实例解析
2017/06/15 Javascript
详解vue2.0 使用动态组件实现 Tab 标签页切换效果(vue-cli)
2017/08/30 Javascript
微信小程序上传图片到服务器实例代码
2017/11/07 Javascript
mpvue中配置vuex并持久化到本地Storage图文教程解析
2018/03/15 Javascript
浅谈Angular 观察者模式理解
2018/11/01 Javascript
vue自定义指令的创建和使用方法实例分析
2018/12/04 Javascript
详解在网页上通过JS实现文本的语音朗读
2019/03/28 Javascript
微信小程序API—获取定位的详解
2019/04/30 Javascript
jquery实现的放大镜效果示例
2020/02/24 jQuery
js如何验证密码强度
2020/03/18 Javascript
ant-design-vue按需加载的坑的解决
2020/05/14 Javascript
Python 异常处理的实例详解
2017/09/11 Python
Python OpenCV图像指定区域裁剪的实现
2019/10/30 Python
python中列表的含义及用法
2020/05/26 Python
python中对二维列表中一维列表的调用方法
2020/06/07 Python
pyx文件 生成pyd 文件用于 cython调用的实现
2021/03/04 Python
京东国际站:JOYBUY
2017/11/23 全球购物
澳大利亚家具和家居用品在线商店:Interiors Online
2018/03/05 全球购物
日本航空官方网站:JAL
2019/06/19 全球购物
丝芙兰意大利官方网站:Sephora.it
2019/12/13 全球购物
大学生收银员求职信分享
2014/01/02 职场文书
主题酒店策划书
2014/01/28 职场文书
会务接待方案
2014/02/27 职场文书
七一党日活动总结
2014/07/08 职场文书
2015年幼儿园大班工作总结
2015/04/25 职场文书
疾病证明书
2015/06/19 职场文书
中秋晚会致辞
2015/07/31 职场文书