关于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中的With语句
Feb 02 Python
Python捕捉和模拟鼠标事件的方法
Jun 03 Python
利用Python破解验证码实例详解
Dec 08 Python
详解用Python处理HTML转义字符的5种方式
Dec 27 Python
对Pandas MultiIndex(多重索引)详解
Nov 16 Python
对python中的控制条件、循环和跳出详解
Jun 24 Python
python中将两组数据放在一起按照某一固定顺序shuffle的实例
Jul 15 Python
Python Django 命名空间模式的实现
Aug 09 Python
python 默认参数相关知识详解
Sep 18 Python
python将图片转base64,实现前端显示
Jan 09 Python
安装python依赖包psycopg2来调用postgresql的操作
Jan 01 Python
Python OpenCV快速入门教程
Apr 17 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
转生史莱姆:萌王第一次撸串开心到飞起,哥布塔撸串却神似界王神
2018/11/30 日漫
php中curl和file_get_content的区别
2014/05/10 PHP
php专用数组排序类ArraySortUtil用法实例
2015/04/03 PHP
PHP SPL标准库中的常用函数介绍
2015/05/11 PHP
优化WordPress中文章与评论的时间显示
2016/01/12 PHP
PHP Try-catch 语句使用技巧
2016/02/28 PHP
IE不出现Flash激活框的小发现的js实现方法
2007/09/07 Javascript
JavaScript Date对象使用总结
2009/05/14 Javascript
如何确保JavaScript的执行顺序 之jQuery.html深度分析
2011/03/03 Javascript
关于extjs treepanel复选框选中父节点与子节点的问题
2013/04/02 Javascript
JS自动适应的图片弹窗实例
2013/06/29 Javascript
iframe子页面获取父页面元素的方法
2013/11/05 Javascript
js创建对象的方法汇总
2016/01/07 Javascript
jquery+ajax实现直接提交表单实例分析
2016/06/17 Javascript
获取jqGrid中选择的行的数据
2016/11/30 Javascript
清除js缓存的多种方法总结
2016/12/09 Javascript
Node.js API详解之 readline模块用法详解
2020/05/22 Javascript
[01:06:18]DOTA2-DPC中国联赛 正赛 Phoenix vs Dynasty BO3 第二场 1月26日
2021/03/11 DOTA
Python pickle类库介绍(对象序列化和反序列化)
2014/11/21 Python
Python去除字符串两端空格的方法
2015/05/21 Python
浅谈Python中copy()方法的使用
2015/05/21 Python
Python饼状图的绘制实例
2019/01/15 Python
Pycharm+Scrapy安装并且初始化项目的方法
2019/01/15 Python
Python3.7将普通图片(png)转换为SVG图片格式(网站logo图标)动起来
2020/04/21 Python
基于Keras的格式化输出Loss实现方式
2020/06/17 Python
python对批量WAV音频进行等长分割的方法实现
2020/09/25 Python
Python 使用SFTP和FTP实现对服务器的文件下载功能
2020/12/17 Python
AutoShack.com加拿大:北美主要的汽车零部件零售商
2019/07/24 全球购物
广告学专业应届生求职信
2013/10/01 职场文书
优秀的自荐信要注意哪些
2014/01/03 职场文书
《狐假虎威》教学反思
2014/02/07 职场文书
10的分与合教学反思
2014/04/30 职场文书
党政领导班子群众路线对照检查材料思想汇报
2014/09/27 职场文书
2014年社区卫生工作总结
2014/12/18 职场文书
Django程序的优化技巧
2021/04/29 Python
python中的sys模块和os模块
2022/03/20 Python