51Testing软件测试论坛

标题: 奇妙的partial函数 [打印本页]

作者: ufoofuufoofu    时间: 6 小时前
标题: 奇妙的partial函数
     python语言通常要求尽可能简捷面优雅,让使用者专注于业务方面而不为语法等问题头疼,为此它提供了大量用于优化这方面的功能,比如函数式编程、链式调用、魔术字、上下文管理器、协程等等。比如本文介绍的partial函数,它的作用就是用于处理参数过于复杂的问题,比如我有个函数,需要调用的参数过多,一开始只能写成这样子,通过多个列表来携带参数。
  1. def leveling(waveslist,instrumentinfo=['10.18.2.204',10001,'123','123',1520,1630,True],wssinfo=['10.18.1.22','10.26.0.10',True],bd=0.15,ratio=1):
复制代码
   这种调用一直被IDE警告过于危险,需要修改,但上面的每个参数都有用,导致每次配置时需要写一长串,如果用上面所示的默认值,当要修改配置时需要找到原函数更改默认值或者重写那一长串参数,调用十分麻烦。同时这一系列参数并不是每次都需要改动,一般是要改动中间的一部分。一般这种情况就会推荐写个配置文件每次读文件配置,或者放置个微型数据库每次从数据库加载,这两种又涉及到文件读写和数据库操作,对于急于使用的我们而言又需要重新讨论文件或数据库如何设计以及在公共接口调用的问题。
    还好python内有partial函数,它可以“冻结”某些函数而留下需要修改的部分,因此我们可以这样写
  1. test1=partial(leveling,insturmentinfo=['10.18.2.204',10001,'123','123',1520,1630,True])
  2. test2=partial(test1,wssinfo=['10.18.1.22','10.26.0.10',True])
复制代码
通过“冻结”部分参数从而将原本异常复杂的函数参数层层拨离,同时也不需要每次返回原函数查看,极大地提高了代码的简便和优雅。




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2