关于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爬虫入门教程之糗百图片爬虫代码分享
Sep 02 Python
Python的消息队列包SnakeMQ使用初探
Jun 29 Python
python生成词云的实现方法(推荐)
Jun 13 Python
Python处理菜单消息操作示例【基于win32ui模块】
May 09 Python
Python操作json的方法实例分析
Dec 06 Python
python实现视频分帧效果
May 31 Python
Python通用函数实现数组计算的方法
Jun 13 Python
python实现大文件分割与合并
Jul 22 Python
python绘制无向图度分布曲线示例
Nov 22 Python
python 使用事件对象asyncio.Event来同步协程的操作
May 04 Python
python操作链表的示例代码
Sep 27 Python
Python还能这么玩之只用30行代码从excel提取个人值班表
Jun 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
IIS php环境配置PHP5 MySQL5 ZendOptimizer phpmyadmin安装与配置
2008/11/18 PHP
php实现MD5加密16位(不要默认的32位)
2013/08/12 PHP
php header函数的常用http头设置
2015/06/25 PHP
php 函数使用可变数量的参数方法
2017/05/02 PHP
Laravel框架路由和控制器的绑定操作方法
2018/06/12 PHP
PHP使用标准库spl实现的观察者模式示例
2018/08/04 PHP
PNGHandler-借助JS让PNG图在IE下实现透明(包括背景图)
2007/08/31 Javascript
jquery统计用户选中的复选框的个数
2014/06/06 Javascript
javascript解析json实例详解
2014/11/05 Javascript
js实现温度计时间样式代码分享
2015/08/21 Javascript
JS中作用域和变量提升(hoisting)的深入理解
2016/10/31 Javascript
浅谈JavaScript的自动垃圾收集机制
2016/12/15 Javascript
简单实现Vue的observer和watcher
2016/12/21 Javascript
基于bootstrap按钮式下拉菜单组件的搜索建议插件
2017/03/25 Javascript
利用Vue v-model实现一个自定义的表单组件
2017/04/27 Javascript
微信小程序 wx.request方法的异步封装实例详解
2017/05/18 Javascript
js+css3实现简单时钟特效
2020/09/13 Javascript
[10:49]2014国际邀请赛 叨叨刀塔第二期为真正的电竞喝彩
2014/07/21 DOTA
[38:54]完美世界DOTA2联赛PWL S2 Rebirth vs LBZS 第一场 11.28
2020/12/01 DOTA
python利用正则表达式提取字符串
2016/12/08 Python
Flask框架通过Flask_login实现用户登录功能示例
2018/07/17 Python
python环形单链表的约瑟夫问题详解
2018/09/27 Python
深入浅析Python中的迭代器
2019/06/04 Python
春节到了 教你使用python来抢票回家
2020/01/06 Python
基于python-pptx库中文文档及使用详解
2020/02/14 Python
Python内置函数及功能简介汇总
2020/10/13 Python
基于Python组装jmx并调用JMeter实现压力测试
2020/11/03 Python
ghd官网:英国ghd直发器品牌
2018/05/04 全球购物
幼儿园老师寄语
2014/04/03 职场文书
金融专业毕业生自荐信
2014/06/26 职场文书
政府个人对照检查材料
2014/08/28 职场文书
2014年环境卫生工作总结
2014/11/24 职场文书
统计员岗位职责
2015/02/11 职场文书
祝福语集锦:给百岁老人祝寿贺词
2019/11/19 职场文书
Window server 2012 R2 AD域的组策略相关设置
2022/04/28 Servers
Redis唯一ID生成器的实现
2022/07/07 Redis