关于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的Flask框架中使用日期和时间的教程
Apr 21 Python
一个基于flask的web应用诞生 bootstrap框架美化(3)
Apr 11 Python
Python正则抓取新闻标题和链接的方法示例
Apr 24 Python
Python编程实现的图片识别功能示例
Aug 03 Python
详解Python实现多进程异步事件驱动引擎
Aug 25 Python
python 定时器,轮询定时器的实例
Feb 20 Python
20行python代码的入门级小游戏的详解
May 05 Python
使用python制作游戏下载进度条的代码(程序说明见注释)
Oct 24 Python
使用python-pptx包批量修改ppt格式的实现
Feb 14 Python
python Shapely使用指南详解
Feb 18 Python
Python实现寻找回文数字过程解析
Jun 09 Python
python 基于selectors库实现文件上传与下载
Dec 31 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 第二节 数据类型之字符串类型
2012/04/28 PHP
PHP实现货币换算的方法
2014/11/29 PHP
thinkphp微信开之安全模式消息加密解密不成功的解决办法
2015/12/02 PHP
laravel如何开启跨域功能示例详解
2017/08/31 PHP
利用Homestead快速运行一个Laravel项目的方法详解
2017/11/14 PHP
PHP压缩图片功能的介绍
2019/03/21 PHP
php和C#的yield迭代器实现方法对比分析
2019/07/17 PHP
显示、隐藏密码
2006/07/01 Javascript
利用JQuery为搜索栏增加tag提示
2009/06/22 Javascript
Firebug入门指南(Firefox浏览器)
2010/08/21 Javascript
关于jQuery对象数据缓存Cache原理以及jQuery.data详解
2013/04/07 Javascript
js弹出div并显示遮罩层
2014/02/12 Javascript
Bootstrap每天必学之日期控制
2016/03/07 Javascript
Sea.JS知识总结
2016/05/05 Javascript
微信小程序 欢迎界面开发的实例详解
2016/11/30 Javascript
值得收藏的vuejs安装教程
2017/11/21 Javascript
基于vue-ssr服务端渲染入门详解
2018/01/08 Javascript
AngularJS实时获取并显示密码的方法
2018/02/06 Javascript
在vue中使用v-bind:class的选项卡方法
2018/09/27 Javascript
详解从NodeJS搭建中间层再谈前后端分离
2018/11/13 NodeJs
详解Angular模板引用变量及其作用域
2018/11/23 Javascript
vue实现的网易云音乐在线播放和下载功能案例
2019/02/18 Javascript
如何在Vue.JS中使用图标组件
2020/08/04 Javascript
pycharm配置安装autopep8自动规范代码的实现
2021/03/02 Python
荷兰包包购物网站:The Little Green Bag
2018/03/17 全球购物
英国排名第一的在线宠物用品商店:Monster Pet Supplies
2018/05/20 全球购物
意大利顶级奢侈品电商:LUISAVIAROMA(支持中文)
2020/05/26 全球购物
哪些情况下不应该使用索引
2015/07/20 面试题
物流专业大学生职业生涯规划书范文
2014/01/15 职场文书
幼儿园母亲节活动方案
2014/03/10 职场文书
经贸专业毕业生求职信范文
2014/05/01 职场文书
大学生就业自荐书
2014/06/16 职场文书
镇政府副镇长群众路线专题民主生活会对照检查材料
2014/09/19 职场文书
学校2016年全国助残日活动总结
2016/04/01 职场文书
QT与javascript交互数据的实现
2021/05/26 Javascript
详解Java实践之建造者模式
2021/06/18 Java/Android