关于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 17 Python
Python基于回溯法子集树模板实现8皇后问题
Sep 01 Python
Python实现的HMacMD5加密算法示例
Apr 03 Python
解决Django数据库makemigrations有变化但是migrate时未变动问题
May 30 Python
python 创建一个空dataframe 然后添加行数据的实例
Jun 07 Python
python看某个模块的版本方法
Oct 16 Python
python爬虫租房信息在地图上显示的方法
May 13 Python
Python标准库itertools的使用方法
Jan 17 Python
关于torch.optim的灵活使用详解(包括重写SGD,加上L1正则)
Feb 20 Python
pyinstaller打包成无控制台程序时运行出错(与popen冲突的解决方法)
Apr 15 Python
Python3自带工具2to3.py 转换 Python2.x 代码到Python3的操作
Mar 03 Python
python3 实现mysql数据库连接池的示例代码
Apr 17 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 配置文件中open_basedir选项作用
2009/07/19 PHP
用PHP和Shell写Hadoop的MapReduce程序
2014/04/15 PHP
PHP中数组转换为SimpleXML教程
2019/01/27 PHP
用jquery模仿的a的title属性(兼容ie6/7)
2013/01/21 Javascript
javascript一元操作符(递增、递减)使用示例
2013/08/07 Javascript
实现动画效果核心方式的js代码
2013/09/27 Javascript
showModelDialog弹出文件下载窗口的使用示例
2013/11/19 Javascript
JS运动框架之分享侧边栏动画实例
2015/03/03 Javascript
非常实用的12个jquery代码片段
2015/11/02 Javascript
深入理解React Native原生模块与JS模块通信的几种方式
2017/07/24 Javascript
详解vue组件基础
2018/05/04 Javascript
jsonp跨域获取百度联想词的方法分析
2019/05/13 Javascript
vue 父组件通过$refs获取子组件的值和方法详解
2019/11/07 Javascript
js常用方法、检查是否有特殊字符串、倒序截取字符串操作完整示例
2020/01/26 Javascript
封装Vue Element的table表格组件的示例详解
2020/08/19 Javascript
JavaScript实现简单验证码
2020/08/24 Javascript
Python 获取新浪微博的最新公共微博实例分享
2014/07/03 Python
Python基于回溯法子集树模板解决m着色问题示例
2017/09/07 Python
Python之批量创建文件的实例讲解
2018/05/10 Python
python3下使用cv2.imwrite存储带有中文路径图片的方法
2018/05/10 Python
pthon贪吃蛇游戏详细代码
2019/01/27 Python
python3 图片 4通道转成3通道 1通道转成3通道 图片压缩实例
2019/12/03 Python
python GUI框架pyqt5 对图片进行流式布局的方法(瀑布流flowlayout)
2020/03/12 Python
Python Dataframe常见索引方式详解
2020/05/27 Python
详解numpy1.19.4与python3.9版本冲突解决
2020/12/15 Python
俄罗斯在线手表和珠宝商店:AllTime
2019/09/28 全球购物
网络工程师个人的自我评价范文
2013/10/01 职场文书
党员培训思想汇报
2014/01/07 职场文书
主持人婚宴答谢词
2014/01/28 职场文书
融资合作协议书范本
2014/10/17 职场文书
信访工作汇报材料
2014/10/27 职场文书
前台接待岗位职责范本
2015/04/03 职场文书
2015年毕业实习工作总结
2015/05/29 职场文书
圆明园观后感
2015/06/03 职场文书
新学期感想
2015/08/10 职场文书
AJAX引擎原理以及XmlHttpRequest对象的axios、fetch区别详解
2022/04/09 Javascript