偏函数(Partial function)是通过将一个函数的部分参数预先绑定为某些值,从而得到一个新的具有较少可变参数的函数。在Python中,可以通过functools中的partial高阶函数来实现偏函数功能。

目前,在网上可以找到很多关于functools.partial用法的文章和例子。比如下面这个:

这个例子比较好地展示了functools.partial的用法,但是并没有讲清楚偏函数究竟应该用在什么样的场景中,总给人一种屠龙之术,华而不实的感觉。

今天,小编就带大家通过几个实用的例子,来分析一下,善用functools.partial将会给我们的代码带来怎样的变化。

实例1:用functools.partial生成自己的专属函数

我们在编码时经常会遇到这样的场景,即根据一个字符串的内容而采取不同的处理逻辑,就像下面这样:

初看之下,这种写法也许还过得去。但是时间一长,你可能就忘了这些正则表达式究竟是干什么的了。于是,我们做了下面的重构:

这样看起来感觉好多了。事实上,如果只有这三个函数的话,我是可以接受目前的写法的。但是,如果你的代码中有几十个类似的用于判断字符串模式的函数,那么就需要在一个地方把它们统一管理起来,于是就有了下面的写法:

在这段代码中,我们通过functools.partial将re.search函数与不同的正则表达式绑定,从而得到了一系列供我们使用的专属函数。通过这种方法,不但使得代码更加简练,而且提高了可读性。

实例2:用partial生成具有继承关系的辅助对象

假设我们现在要写一段处理ajax请求的代码,重构前的代码是长这个样子的:

这段代码主要有以下几个问题:

每次构造HttpResponse对象时,都需要传入"application/json"作为参数

每次都需要调用json.dumps()

重复出现的状态码

以上问题使得这段代码看起来不够精炼,占用了较大篇幅但实际上没有做太多事情。

所以,我们重构的第一步是要抽象出一个JsonResponse对象来承载返回值:

经过第一步重构后的代码如下:


所有返回HttpResponse 的地方都被我们新引入的JsonResponse所替代。

接下来,通过functools.partial,我们可以对Response做进一步的抽象,生成一系列JsonResponse的“子类”:

最终,重构后的代码如下:

这样,我们最大限度地减少了冗余代码,使代码精炼易读。

我们再来看最后一个例子,看看partial是如何让代码变得简练的。

实例3:Django emails

看了今天的例子,大家是不是觉得Python提供的partial工具非常的好用呢?不如赶快打开电脑试一下吧。

Python中的partial便函数的理解相关推荐

  1. Python中str()与repr()函数的区别——repr() 的输出追求明确性,除了对象内容,还需要展示出对象的数据类型信息,适合开发和调试阶段使用...

    Python中str()与repr()函数的区别 from:https://www.jianshu.com/p/2a41315ca47e 在 Python 中要将某一类型的变量或者常量转换为字符串对象 ...

  2. python中如何调用函数_如何调用python中的内置函数?(实例解析)

    对于第一次接触到python这门编程语言的朋友来说,刚刚开始学习python编程的时候对于python函数调用这一方面的了解比较少,在这篇文章之中我们就来了解一下python怎么调用函数. Pytho ...

  3. python中内置数学函数详解和实例应用之三角函数_初级阶段(二)

    学习目标: 利用python进行三角函数运算 学习内容: python中的三角函数合集和应用实例 转载请注明出处! 学习产出: 环境:python 3.7, 利用shell进行实例操作. Note: ...

  4. python中的内置函数getattr()介绍及示例

    python中的内置函数getattr()介绍及示例 其实getattr()这个方法最主要的作用是实现反射机制.也就是说可以通过字符串获取方法实例.这样,你就可以把一个类可能要调用的方法放在配置文件里 ...

  5. python平方数迭代器_对python中的高效迭代器函数详解

    python中内置的库中有个itertools,可以满足我们在编程中绝大多数需要迭代的场合,当然也可以自己造轮子,但是有现成的好用的轮子不妨也学习一下,看哪个用的顺手~ 首先还是要先import一下: ...

  6. python函数分几种_简单了解Python中的几种函数

    python是支持多种范型的语言,可以进行所谓函数式编程,其突出体现在有这么几个函数: filter.map.reduce.lambda.yield lambda lambda函数的使用方法:在lam ...

  7. python中的高阶函数

    python中的高阶函数 文章目录: 1 什么是高阶函数? 1.1 高阶函数:一个函数的`函数名`作为参数传给另外一个函数 1.2 高阶函数:一个函数返回值(return)为另外一个`函数` 2 py ...

  8. Python编程语言学习:python中与数字相关的函数(取整等)、案例应用之详细攻略

    Python编程语言学习:python中与数字相关的函数(取整等).案例应用之详细攻略 目录 python中与数字相关的函数 1.对小数进行向上取整 1.1.利用numpy库 1.2.利用math库

  9. Python中字符串常用处理函数

    ** Python中字符串常用处理函数 ** 1.len( )函数 用len( )函数计算字符串的长度 2.strip( )函数 删除字符串两边的空白符(包括:'\n'.'\t'.'\r') 注:只能 ...

最新文章

  1. 你不能忽视的HTML语言3
  2. 修改注册表添加信任站点及启用Activex控件(转载)
  3. ML:MLOps系列讲解之《MLOps原则之监控/“机器学习成绩”系统/可再现性/松散耦合架构(模块化)/基于ML的软件交付指标/MLOps原则和实践的总结》解读
  4. 搜索关键字高亮_Django Haystack 全文检索与关键词高亮
  5. 10进制转化为16进制以内的转化
  6. 20分钟完成Mac上的 LNMP 环境部署,优雅·高效开发(Docker方式)
  7. 设计模式——函数的写作使用外卖模式
  8. (转)javascript 内存泄露工具使用
  9. 内存少导致编译出错,内存增加到24G
  10. vb.net 实现编辑某列并回车后不换行,查询数据进行相关处理
  11. 高通MSM8937/ MSM8953/MSM8940/MSM8920/MSM8917启动流程简介
  12. 图片尺寸的修改(Java)
  13. Android 开发的五大开源网站
  14. firsthead学习笔记
  15. React使用cra创建项目,开启装饰器
  16. 基于51单片机的酒精浓度检测仪设计
  17. a55计算机主板,a55主板最新的报价大全【图解】
  18. H5全新红包直通车网站源码 包含多款游戏已对接支付
  19. Vue -print - nb 打印插件 使用详解 以及连打操作
  20. 使用SCP传输文件报错:ssh: connect to host xx.xx.xx.xx port 22: Connection refusedlost connection

热门文章

  1. 【转】Android BroadcastReceiver介绍
  2. VirtualBox中修改Ubuntu-server分辨率
  3. [CLPR] 定位算法探幽 - 边缘和形态学
  4. Fedora19 搭建LAMP环境
  5. win7下查找端口,使用netstat命令注意事项
  6. 【FI模块学习笔记】 固定资产概述(下)
  7. 【转】三分钟了解Fiori背后的设计理念
  8. SAP保存操作记录CDHDR和CDPOS表,通过修改屏幕字段,查找SAP字段表和字段
  9. SAP特性,物料特性,批次特性建立的BAPI函數
  10. 程序员跳槽的10个建议