关于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实现从脚本里运行scrapy的方法
Apr 07 Python
Python3.x版本中新的字符串格式化方法
Apr 24 Python
Python编码爬坑指南(必看)
Jun 10 Python
Python数据结构之单链表详解
Sep 12 Python
Python 2.x如何设置命令执行的超时时间实例
Oct 19 Python
python实现求特征选择的信息增益
Dec 18 Python
Python3进制之间的转换代码实例
Aug 24 Python
解决Django中修改js css文件但浏览器无法及时与之改变的问题
Aug 31 Python
python使用yield压平嵌套字典的超简单方法
Nov 02 Python
Python使用socketServer包搭建简易服务器过程详解
Jun 12 Python
经验丰富程序员才知道的8种高级Python技巧
Jul 27 Python
Python存储读取HDF5文件代码解析
Nov 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中register_globals参数为OFF和ON的区别(register_globals 使用详解)
2012/02/05 PHP
PHP防止post重复提交数据的简单例子
2014/06/07 PHP
PHP分页类集锦
2014/11/18 PHP
PHP数组与对象之间使用递归实现转换的方法
2015/06/24 PHP
详解PHP数组赋值方法
2015/11/07 PHP
swoole和websocket简单聊天室开发
2017/11/18 PHP
Laravel中10个有用的用法小结
2019/05/06 PHP
jQuery EasyUI API 中文文档 - ComboGrid 组合表格
2011/10/13 Javascript
jQuery实现动画效果的实例代码
2013/05/07 Javascript
原生JS实现表单checkbook获取已选择的值
2013/07/21 Javascript
javascript获取ckeditor编辑器的值(实现代码)
2013/11/18 Javascript
iframe子页面与父页面在同域或不同域下的js通信
2014/05/07 Javascript
加随机数引入脚本不让浏览器读取缓存
2014/09/04 Javascript
Windows下用PyCharm和Visual Studio开始Python编程
2015/10/26 Javascript
微信支付 JS API支付接口详解
2016/07/11 Javascript
深入浅析javascript中的作用域(推荐)
2016/07/19 Javascript
学习掌握JavaScript中this的使用技巧
2016/08/29 Javascript
浅谈js的ajax的异步和同步请求的问题
2016/10/07 Javascript
深入理解JS中的Function.prototype.bind()方法
2016/10/11 Javascript
vue2.0中vue-cli实现全选、单选计算总价格的实例代码
2017/07/18 Javascript
JS与SQL方式随机生成高强度密码示例
2018/12/29 Javascript
vue 获取及修改store.js里的公共变量实例
2019/11/06 Javascript
python实现的重启关机程序实例
2014/08/21 Python
Python中的条件判断语句基础学习教程
2016/02/07 Python
Python中列表和元组的使用方法和区别详解
2020/12/30 Python
python制作填词游戏步骤详解
2019/05/05 Python
python中selenium操作下拉滚动条的几种方法汇总
2019/07/14 Python
tensorflow 获取所有variable或tensor的name示例
2020/01/04 Python
tensorflow入门:TFRecordDataset变长数据的batch读取详解
2020/01/20 Python
Python面向对象程序设计之类和对象、实例变量、类变量用法分析
2020/03/23 Python
浅谈PyTorch中in-place operation的含义
2020/06/27 Python
python中 _、__、__xx__()区别及使用场景
2020/06/30 Python
详解Python直接赋值,深拷贝和浅拷贝
2020/07/09 Python
高街生活方式全球在线商店:AZBRO
2017/08/26 全球购物
毕业生求职简历的自我评价
2013/10/23 职场文书
煤矿班组长竞聘书
2014/03/31 职场文书