51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 97|回复: 0
打印 上一主题 下一主题

[python] 奇妙的partial函数

[复制链接]
  • TA的每日心情
    慵懒
    昨天 17:55
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

    跳转到指定楼层
    1#
    发表于 6 小时前 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
         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])
    复制代码
    通过“冻结”部分参数从而将原本异常复杂的函数参数层层拨离,同时也不需要每次返回原函数查看,极大地提高了代码的简便和优雅。
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-9-27 17:31 , Processed in 0.072261 second(s), 25 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表