关于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使用xmlrpc实例讲解
Dec 17 Python
Python有序字典简单实现方法示例
Sep 28 Python
用matplotlib画等高线图详解
Dec 14 Python
python机器学习理论与实战(六)支持向量机
Jan 19 Python
python生成器,可迭代对象,迭代器区别和联系
Feb 04 Python
Python装饰器用法示例小结
Feb 11 Python
python PyTorch参数初始化和Finetune
Feb 11 Python
python3利用Dlib19.7实现人脸68个特征点标定
Feb 26 Python
python批量将excel内容进行翻译写入功能
Oct 10 Python
From CSV to SQLite3 by python 导入csv到sqlite实例
Feb 14 Python
基于python实现判断字符串是否数字算法
Jul 10 Python
python使用torch随机初始化参数
Mar 22 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
ob_start(),ob_start('ob_gzhandler')使用
2006/12/25 PHP
解析zend studio中直接导入svn中的项目的方法步骤
2013/06/21 PHP
php中session使用示例
2014/03/29 PHP
PHP解压ZIP文件到指定文件夹的方法
2016/11/17 PHP
php源码之将图片转化为data/base64数据流实例详解
2016/11/27 PHP
Alliance vs AM BO3 第二场2.13
2021/03/10 DOTA
动态刷新 dorado树的js代码
2009/06/12 Javascript
为jQuery增加join方法的实现代码
2010/11/28 Javascript
导航跟随滚动条置顶移动示例代码
2013/09/11 Javascript
同域jQuery(跨)iframe操作DOM(实例讲解)
2013/12/19 Javascript
js读写cookie实现一个底部广告浮层效果的两种方法
2013/12/29 Javascript
html的DOM中document对象images集合用法实例
2015/01/21 Javascript
jQuery调取jSon数据并展示的方法
2015/01/29 Javascript
jquery实现简单实用的弹出层效果代码
2015/10/15 Javascript
jQuery下拉框的简单应用
2016/06/24 Javascript
使用纯JS代码判断字符串中有多少汉字的实现方法(超简单实用)
2016/11/12 Javascript
bootstrap输入框组使用方法
2017/02/07 Javascript
Vue实现virtual-dom的原理简析
2017/07/10 Javascript
Vue组件开发技巧总结
2018/03/04 Javascript
es6中reduce的基本使用方法
2019/09/10 Javascript
JavaScript多种滤镜算法实现代码实例
2019/12/10 Javascript
python求最大值,不使用内置函数的实现方法
2019/07/09 Python
python logging模块书写日志以及日志分割详解
2019/07/22 Python
Python 实现顺序高斯消元法示例
2019/12/09 Python
Python通过4种方式实现进程数据通信
2020/03/12 Python
Pycharm打开已有项目配置python环境的方法
2020/07/03 Python
Python中Selenium库使用教程详解
2020/07/23 Python
序列化Python对象的方法
2020/08/01 Python
中学生检讨书范文
2014/11/03 职场文书
办公用房租赁协议书
2014/11/29 职场文书
2015年工商所工作总结
2015/05/21 职场文书
幼儿园中班教育随笔
2015/08/14 职场文书
Nginx URL重写rewrite机制原理及使用实例
2021/04/01 Servers
Mysql 如何批量插入数据
2021/04/06 MySQL
Python实现视频中添加音频工具详解
2021/12/06 Python
腾讯云服务器部署前后分离项目之前端部署
2022/06/28 Servers