关于Python形参打包与解包小技巧分享

 更新时间:2019年08月24日 12:36:25   作者:WarmSword  
今天小编就为大家分享一篇关于Python形参打包与解包小技巧分享,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

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安装的软件总结

    在本篇文章里小编给大家整理了是关于学python安装什么软件的相关知识点内容,有需要的朋友们学习下。
    2019-10-10
  • 4种方法教你利用Python发现数据的规律

    4种方法教你利用Python发现数据的规律

    发现数据的规律是数据分析和数据科学中非常重要的一个步骤。这篇文章主要给大家整理了4个可以发现数据规律的方法,希望对大家有所帮助
    2023-03-03
  • python自动从arxiv下载paper的示例代码

    python自动从arxiv下载paper的示例代码

    这篇文章主要介绍了python自动从arxiv下载paper的示例代码,帮助大家更好的理解和学习python,感兴趣的朋友可以了解下
    2020-12-12
  • Python运算符优先级详细整理

    Python运算符优先级详细整理

    在一个表达式中可能包含多个有不同运算符连接起来的、具有不同数据类型的数据对象,由于表达式有多种运算,不同的运算顺序可能得出不同结果甚至出现错误运算错误,下面这篇文章主要给大家介绍了关于Python运算符优先级的相关资料,需要的朋友可以参考下
    2023-01-01
  • python中pd.cut()与pd.qcut()的对比及示例

    python中pd.cut()与pd.qcut()的对比及示例

    本文主要介绍了python中pd.cut()与pd.qcut()的对比及示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • Python打包可执行文件的方法详解

    Python打包可执行文件的方法详解

    这篇文章主要介绍了Python打包可执行文件的方法,结合实例形式分析了Python基于py2exe及PyInstall等打包生成可执行文件的相关技巧,需要的朋友可以参考下
    2016-09-09
  • appium+python自动化配置(adk、jdk、node.js)

    appium+python自动化配置(adk、jdk、node.js)

    这篇文章主要介绍了appium+python自动化配置(adk、jdk、node.js),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • python3+requests接口自动化session操作方法

    python3+requests接口自动化session操作方法

    今天小编就为大家分享一篇python3+requests接口自动化session操作方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10
  • 如何利用Python解析超大的json数据(GB级别)

    如何利用Python解析超大的json数据(GB级别)

    果不想从头开始创建数据格式来存储数据,JSON是一个不错的选择,下面这篇文章主要给大家介绍了关于如何利用Python解析超大的json数据(GB级别)的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • Python 正则表达式 re.findall()全面解析

    Python 正则表达式 re.findall()全面解析

    本文详解Python re.findall()方法,用于提取字符串中所有正则匹配项,重点涵盖分组处理、flags参数(如忽略大小写、多行模式、Unicode支持等)及应用场景,如提取邮件、URL、日志信息等,并提醒注意性能与返回值格式差异,感兴趣的朋友跟随小编一起看看吧
    2025-09-09

最新评论