关于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+django快速实现文件上传
Oct 24 Python
Python网络编程 Python套接字编程
Sep 13 Python
python实现员工管理系统
Jan 11 Python
Python3中的json模块使用详解
May 05 Python
python实现最长公共子序列
May 22 Python
关于django 1.10 CSRF验证失败的解决方法
Aug 31 Python
使用PyTorch训练一个图像分类器实例
Jan 08 Python
Python 日期的转换及计算的具体使用详解
Jan 16 Python
Python 实现加密过的PDF文件转WORD格式
Feb 04 Python
matplotlib 生成的图像中无法显示中文字符的解决方法
Jun 10 Python
Python -m参数原理及使用方法解析
Aug 21 Python
如何在scrapy中集成selenium爬取网页的方法
Nov 18 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
一个取得文件扩展名的函数
2006/10/09 PHP
《APMServ 5.1.2》使用图解
2006/10/23 PHP
新手配置 PHP 调试环境(IIS+PHP+MYSQL)
2007/01/10 PHP
CodeIgniter 完美解决URL含有中文字符串
2016/05/13 PHP
利用php获得flv视频长度的实例代码
2017/10/26 PHP
PHP简单实现二维数组的矩阵转置操作示例
2017/11/24 PHP
在JavaScript中获取请求的URL参数[正则]
2010/12/25 Javascript
JS 控件事件小结
2012/10/31 Javascript
分享Javascript中最常用的55个经典小技巧
2013/11/29 Javascript
判断客户浏览器是否支持cookie的示例代码
2013/12/23 Javascript
JSON.stringify转换JSON时日期时间不准确的解决方法
2014/08/08 Javascript
Node.js模块加载详解
2014/08/16 Javascript
详解AngularJS中的依赖注入机制
2015/06/17 Javascript
Javascript技术栈中的四种依赖注入详解
2016/02/23 Javascript
js 创建对象 经典模式全面了解
2016/08/16 Javascript
微信小程序购物商城系统开发系列-目录结构介绍
2016/11/21 Javascript
详解vue-Resource(与后端数据交互)
2017/01/16 Javascript
分分钟学会vue中vuex的应用(入门教程)
2017/09/14 Javascript
基于vue cli重构多页面脚手架过程详解
2018/01/23 Javascript
Vue 实现一个简单的鼠标拖拽滚动效果插件
2020/12/10 Vue.js
uniapp微信小程序:key失效的解决方法
2021/01/20 Javascript
[01:05:29]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Aster BO3 第二场 1月24日
2021/03/11 DOTA
深入浅析python定时杀进程
2016/06/06 Python
python清空命令行方式
2020/01/13 Python
python接入支付宝的实例操作
2020/07/20 Python
CSS3选择器新增问题的实现
2021/01/21 HTML / CSS
纯CSS3实现运行时钟的示例代码
2021/01/25 HTML / CSS
用C或者C++语言实现SOCKET通信
2015/02/24 面试题
我的大学生活职业生涯规划
2014/01/02 职场文书
《月光启蒙》教学反思
2014/03/01 职场文书
学校安全工作汇报材料
2014/08/16 职场文书
预备党员转正材料
2014/12/19 职场文书
酒店前台辞职书
2015/02/26 职场文书
会计求职信怎么写
2015/03/20 职场文书
英文慰问信范文
2015/03/24 职场文书
Python爬虫入门案例之回车桌面壁纸网美女图片采集
2021/10/16 Python