关于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 sys模块sys.path使用方法示例
Dec 04 Python
Python中一些自然语言工具的使用的入门教程
Apr 13 Python
在Python下尝试多线程编程
Apr 28 Python
Python基于多线程操作数据库相关问题分析
Jul 11 Python
Python 3 实现定义跨模块的全局变量和使用教程
Jul 07 Python
python内存监控工具memory_profiler和guppy的用法详解
Jul 29 Python
详解python3中用HTMLTestRunner.py报ImportError: No module named 'StringIO'如何解决
Aug 27 Python
使用python将最新的测试报告以附件的形式发到指定邮箱
Sep 20 Python
Win10 安装PyCharm2019.1.1(图文教程)
Sep 29 Python
pytorch实现seq2seq时对loss进行mask的方式
Feb 18 Python
Python打印不合法的文件名
Jul 31 Python
Python使用openpyxl模块处理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
php实现可以设置中奖概率的抽奖程序代码分享
2014/01/19 PHP
php跨服务器访问方法小结
2015/05/12 PHP
PHP正则匹配操作简单示例【preg_match_all应用】
2017/07/10 PHP
JS获取dom 对象 ajax操作 读写cookie函数
2009/11/18 Javascript
javascript学习(一)构建自己的JS库
2013/01/02 Javascript
jquery获取html元素的绝对位置和相对位置的方法
2014/06/20 Javascript
JQuery中clone方法复制节点
2015/05/18 Javascript
深入浅析JavaScript系列(13):This? Yes,this!
2016/01/05 Javascript
基于Bootstrap实现图片轮播效果
2016/05/22 Javascript
JS 面向对象之继承---多种组合继承详解
2016/07/10 Javascript
BootStrap无限级分类(无限极分类封装版)
2016/08/26 Javascript
bootstrap table操作技巧分享
2017/02/15 Javascript
js实现一个猜数字游戏
2017/03/31 Javascript
JS实现移动端实时监听输入框变化的实例代码
2017/04/12 Javascript
AngularJS 单选框及多选框的双向动态绑定
2017/04/20 Javascript
Vue的elementUI实现自定义主题方法
2018/02/23 Javascript
详解Nuxt.js部署及踩过的坑
2018/08/07 Javascript
Vue动态生成el-checkbox点击无法赋值的解决方法
2019/02/21 Javascript
JS中比Switch...Case更优雅的多条件判断写法
2019/09/05 Javascript
vue el-table实现自定义表头
2019/12/11 Javascript
浅谈JavaScript中的“!!”作用
2020/08/03 Javascript
Python中使用HTMLParser解析html实例
2015/02/08 Python
举例讲解Python编程中对线程锁的使用
2016/07/12 Python
python设定并获取socket超时时间的方法
2019/01/12 Python
selenium处理元素定位点击无效问题
2019/06/12 Python
详解Windows下PyCharm安装Numpy包及无法安装问题解决方案
2020/06/18 Python
HTML5录音实践总结(Preact)
2020/05/07 HTML / CSS
html5 video全屏播放/自动播放的实现示例
2020/08/06 HTML / CSS
财务信息服务专业自荐书范文
2014/02/08 职场文书
中国梦团日活动总结
2014/07/07 职场文书
新闻传播专业求职信
2014/07/22 职场文书
护士自荐信怎么写
2015/03/06 职场文书
新人入职感言
2015/07/31 职场文书
SpringBoot SpringEL表达式的使用
2021/07/25 Java/Android
AJAX实现指定部分页面刷新效果
2021/10/16 Javascript
吉利入股戴姆勒后smart“长大了”
2022/04/21 数码科技