一、partial 的作用:

  partial 用于对一个已有函数进行包装,达到功能的定制的目的。

二、例子:

  假设我们要完成两个功能,第一个功能是完成两个数相加,第二个功能是给一个自增一下

  1、传统方法,由于自增只是第一个功能的特例我们可以这样写代码:

def add(x,y):
return x+y if __name__=="__main__":
a=100
b=200
c=add(a,b) #实现c=a+b a=add(a,1) #实现a=a+1

  这样的实现方式不好,就表现在过几天你回头来看a=add(a,1) 自己都不知道自己当初为什么这么写。

  2、partial, 把方法包装一下,并给它一个更好听的名字

from functools import partial

def add(x,y):
return x+y def plus_one(x):
return partial(add,x,1)() if __name__=="__main__":
a=100
b=200
c=add(a,b) #实现c=a+b
a=add(a,1) #实现a=a+1
b=plus_one(b) #实现b=b+1 plus_one 比之前的add(a,1) 更加的表意

三、用partial的好处:

  就刚才上面的例子而言,完成可能自己重新叫plus_one的方法,如下面的方法,但是这样做的话plus_one 对add就没有依赖了,

  这样就两个函数没有表现出来任何关系,如果要改就有可能同时要改两个函数,而不是只改add函数

def add(x,y):
return x+y def plus_one(x):
return x+1

  比如新的需求来了,要求参数是整数的情况下才执行相关操作

from functools import partial

def add(x,y):
if isinstance(x,int) and isinstance(y,int):
return x+y
else:
raise ValueError("参数要是整数才行") def plus_one(x):
return partial(add,x,1)()

  这样只要修改add 函数就行了

----

学习交流

python3 functools partial 用于函数的包装器详解的更多相关文章

  1. C++11多态函数对象包装器

    [C++11多态函数对象包装器] 针对函数对象的多态包装器(又称多态函数对象包装器)在语义和语法上和函数指针相似,但不像函数指针那么狭隘.只要能被调用,且其参数能与包装器兼容的都能以多态函数对象包装器 ...

  2. C编译器、链接器、加载器详解

    摘自http://blog.csdn.net/zzxian/article/details/16820035 C编译器.链接器.加载器详解 一.概述 C语言的编译链接过程要把我们编写的一个c程序(源代 ...

  3. Solr系列五:solr搜索详解(solr搜索流程介绍、查询语法及解析器详解)

    一.solr搜索流程介绍 1. 前面我们已经学习过Lucene搜索的流程,让我们再来回顾一下 流程说明: 首先获取用户输入的查询串,使用查询解析器QueryParser解析查询串生成查询对象Query ...

  4. python设计模式之装饰器详解(三)

    python的装饰器使用是python语言一个非常重要的部分,装饰器是程序设计模式中装饰模式的具体化,python提供了特殊的语法糖可以非常方便的实现装饰模式. 系列文章 python设计模式之单例模 ...

  5. Wordpress菜单函数wp_nav_menu各参数详解及示例

    Wordpress菜单函数wp_nav_menu各参数详解及示例   注册菜单 首先要注册菜单,将以下函数添加至function.php函数里   register_nav_menus(array( ...

  6. GLSL-几何着色器详解跟实例(GS:Geometry Shader)[转]

    [OpenGL4.0]GLSL-几何着色器详解和实例(GS:Geometry Shader) 一.什么是几何着色器(GS:Geometry Shader) Input Assembler(IA)从顶点 ...

  7. JMeter 后置处理器之正则表达式提取器详解

    后置处理器之正则表达式提取器详解   by:授客 QQ:1033553122 1. 添加正则表达式提取器 右键线程组->添加->后置处理器->正则表达式提取器 2. 提取器配置介绍 ...

  8. WordPress函数:get_bloginfo()用法详解

    描述 返回你博客的信息,这些信息可以用在任何地方的 PHP 代码中.这个函数,和 bloginfo() 一样,可以用来在模板文件的任何地方显示你博客的信息. 用法 <?php $bloginfo ...

  9. PHP函数call_user_func和call_user_func_array详解

    今天在群里面,有个叫lewis的在问call_user_func_array的用法,因为之前一直没有用过,也不能说什么,于是看一下手册,发现是这么写的: call_user_func_array (P ...

随机推荐

  1. 使用 Shell 脚本自动化 Linux 系统维护任务

    如果一个系统管理员花费大量的时间解决问题以及做重复的工作,你就应该怀疑他这么做是否正确.一个高效的系统管理员应该制定一个计划使得其尽量花费少的时间去做重复的工作.因此尽管看起来他没有做很多的工作,但那 ...

  2. ECMAScript5之Object学习笔记(二)

    继续第二部分 Object.freeze(obj) 看字面意思就是“把一个对象冻结”. 下面我们来看个简单的例子以作说明: // a person instance var person = { na ...

  3. POJ 1836-Alignment(DP/LIS变形)

    Alignment Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 13465   Accepted: 4336 Descri ...

  4. java泛型中extends 和 super的区别

    一般对泛型中extends 和 super 的区别是这样介绍的: 关键字说明 ? 通配符类型 <? extends T> 表示类型的上界,表示参数化类型的可能是T 或是 T的子类 < ...

  5. 算法(第四版)学习笔记之java实现希尔排序

    希尔排序思想:使数组中随意间隔为h的元素都是有序的. 希尔排序是插入排序的优化.先对数组局部进行排序,最后再使用插入排序将部分有序的数组排序. 代码例如以下: /** * * @author seab ...

  6. CheeseZH: Stanford University: Machine Learning Ex3: Multiclass Logistic Regression and Neural Network Prediction

    Handwritten digits recognition (0-9) Multi-class Logistic Regression 1. Vectorizing Logistic Regress ...

  7. HDU1698:Just a Hook(线段树区间更新)

    Problem Description In the game of DotA, Pudge’s meat hook is actually the most horrible thing for m ...

  8. C# 编程实现串口通信

    http://blog.sina.com.cn/s/blog_6c67dab30101p3vn.html ----------------------------------------------- ...

  9. js立即执行函数应用--事件绑定

    js中立即执行函数的应用:应用到事件绑定上. 少说多做,直接运行代码(代码中有注释): <!DOCTYPE html> <html lang="zh"> & ...

  10. lftp mirror 上传目录

    1. lftp的确很强大, 要学习一下.       sudo yum install lftp       (测试了一下,ftp软件才92K,lftp有2.3M) 2. lftp mirror 能上 ...