关于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 encode和decode的妙用
Sep 02 Python
python使用多线程不断刷新网页的方法
Mar 31 Python
python使用urllib2实现发送带cookie的请求
Apr 28 Python
python处理xml文件的方法小结
May 02 Python
Python正则表达式非贪婪、多行匹配功能示例
Aug 08 Python
Python2中文处理纪要的实现方法
Mar 10 Python
Python numpy中矩阵的基本用法汇总
Feb 12 Python
python之信息加密题目详解
Jun 26 Python
python 基于TCP协议的套接字编程详解
Jun 29 Python
django实现模板中的字符串文字和自动转义
Mar 31 Python
解决Keras的自定义lambda层去reshape张量时model保存出错问题
Jul 01 Python
Python装饰器如何实现修复过程解析
Sep 05 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采集相关教程之一 CURL函数库
2010/02/15 PHP
提高PHP性能的编码技巧以及性能优化详细解析
2013/08/24 PHP
php登陆页的密码处理方式分享
2013/10/14 PHP
PHPMailer的主要功能特点和简单使用说明
2014/02/17 PHP
PHP生成和获取XML格式数据的方法
2016/03/04 PHP
非常实用的php验证码类
2016/05/15 PHP
php 实现Hash表功能实例详解
2016/11/29 PHP
javascript 新浪背投广告实现代码
2009/07/07 Javascript
JavaScript Event学习第五章 高级事件注册模型
2010/02/07 Javascript
javascript中encodeURI和decodeURI方法使用介绍
2013/05/06 Javascript
js replace 与replaceall实例用法详解
2013/08/03 Javascript
JavaScript实现的双向跨域插件分享
2015/01/31 Javascript
angularJS 中$attrs方法使用指南
2015/02/09 Javascript
微信小程序 向左滑动删除功能的实现
2017/03/10 Javascript
vue+express 构建后台管理系统的示例代码
2018/07/19 Javascript
bootstrap与pagehelper实现分页效果
2018/12/29 Javascript
纯js实现无缝滚动功能代码实例
2020/02/21 Javascript
原生js实现弹幕效果
2020/11/29 Javascript
[02:36]DOTA2亚洲邀请赛小组赛精彩集锦:奇迹哥卡尔秀翻全场
2017/03/28 DOTA
Python操作使用MySQL数据库的实例代码
2017/05/25 Python
Python+树莓派+YOLO打造一款人工智能照相机
2018/01/02 Python
python实现括号匹配的思路详解
2018/08/23 Python
Python使用Selenium爬取淘宝异步加载的数据方法
2018/12/17 Python
python+selenium 定位到元素,无法点击的解决方法
2019/01/30 Python
Python解释器及PyCharm工具安装过程
2020/02/26 Python
使用Python实现将多表分批次从数据库导出到Excel
2020/05/15 Python
Python如何用wx模块创建文本编辑器
2020/06/07 Python
Matplotlib中rcParams使用方法
2021/01/05 Python
CSS3之多背景background使用示例
2013/10/18 HTML / CSS
Staples美国官方网站:办公用品一站式采购
2016/07/28 全球购物
美国汽配连锁巨头Pep Boys官网:轮胎更换、汽车维修服务和汽车零部件
2017/01/14 全球购物
杭州信雅达系统.NET工程师面试试题
2015/02/08 面试题
综合实践活动总结
2014/05/05 职场文书
研究生简历自我评价范文
2014/09/13 职场文书
个人批评与自我批评发言稿
2014/09/28 职场文书
2019年亲子运动会口号
2019/10/11 职场文书