关于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 相关文章推荐
Linux环境下MySQL-python安装过程分享
Feb 02 Python
利用Python如何生成hash值示例详解
Dec 20 Python
python爬虫爬取某站上海租房图片
Feb 04 Python
详谈python在windows中的文件路径问题
Apr 28 Python
基于python requests库中的代理实例讲解
May 07 Python
python3模块smtplib实现发送邮件功能
May 22 Python
python 读取视频,处理后,实时计算帧数fps的方法
Jul 10 Python
详解Django中间件执行顺序
Jul 16 Python
python zip()函数使用方法解析
Oct 31 Python
基于Python fminunc 的替代方法
Feb 29 Python
django haystack实现全文检索的示例代码
Jun 24 Python
python实现scrapy爬虫每天定时抓取数据的示例代码
Jan 27 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查询网站的PR值
2013/10/30 PHP
php上传文件常见问题总结
2015/02/03 PHP
php数组指针函数功能及用法示例
2020/02/11 PHP
在textarea中屏蔽js的某个function的javascript代码
2007/04/20 Javascript
脚本安需导入(装载)的三种模式的对比
2007/06/24 Javascript
仿jQuery的siblings效果的js代码
2011/08/09 Javascript
asp.net网站开发中用jquery实现滚动浏览器滚动条加载数据(类似于腾讯微博)
2012/03/14 Javascript
jquery getScript动态加载JS方法改进详解
2012/11/15 Javascript
IE8下Jquery获取select选中的值post到后台报错问题
2014/07/02 Javascript
jQuery事件用法实例汇总
2014/08/29 Javascript
Javascript学习笔记之数组的遍历和 length 属性
2014/11/23 Javascript
jQuery动态星级评分效果实现方法
2015/08/06 Javascript
JS实现网页右侧带动画效果的伸缩窗口代码
2015/10/29 Javascript
javascript 常用验证函数总结
2016/06/28 Javascript
Three.js快速入门教程
2016/09/09 Javascript
jQuery编写网页版2048小游戏
2017/01/06 Javascript
浅谈javascript的闭包
2017/01/23 Javascript
jquery实现放大镜简洁代码(推荐)
2017/06/08 jQuery
浅谈Node异步编程的机制
2017/10/18 Javascript
详解在Javascript中进行面向切面编程
2019/04/28 Javascript
layui实现鼠标移动到单元格上显示数据的方法
2019/09/11 Javascript
[00:47]DOTA2荣耀之路6:玩不了啦!
2018/05/30 DOTA
python删除过期文件的方法
2015/05/29 Python
Python高级特性 切片 迭代解析
2019/08/23 Python
python使用多线程编写tcp客户端程序
2019/09/02 Python
python3 assert 断言的使用详解 (区别于python2)
2019/11/27 Python
matplotlib基础绘图命令之imshow的使用
2020/08/13 Python
台湾森森购物网:U-mall
2017/10/16 全球购物
Athleta官网:购买女士瑜伽服、技术运动服和休闲运动服
2020/11/12 全球购物
汽车销售求职自荐信
2013/10/01 职场文书
运动会邀请函范文
2014/02/06 职场文书
《那片绿绿的爬山虎》教学反思
2014/02/27 职场文书
安全生产承诺书
2014/03/26 职场文书
无私奉献演讲稿
2014/09/04 职场文书
卫校毕业生自我鉴定
2014/09/28 职场文书
银行员工考核评语
2014/12/31 职场文书