一、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. [Unity-6] GameObject有时候渲染不出来

    问题描写叙述:在做游戏的过程中遇到了这样一个问题.一个怪物,假设让他出如今屏幕的中央是没问题的,可是让他出如今屏幕的边缘的位置发现他没有出现. 问题原因:经过检查发现,我给这个GameObject加入 ...

  2. OpenFace库(Tadas Baltrusaitis)中基于Haar Cascade Classifiers进行人脸检測的測试代码

    Tadas Baltrusaitis的OpenFace是一个开源的面部行为分析工具.它的源代码能够从 https://github.com/TadasBaltrusaitis/OpenFace 下载. ...

  3. ArcGIS中的批量处理

    在实际生产过程中,经常遇到批量处理数据的情况.在ArcGIS中,除自己写代码来处理这类问题外,它提供了一个批量处理的工具,在ToolBox对应的工具上右键即可选择批处理工具. 和单个处理方式一样,输入 ...

  4. ZH奶酪:通过CSS自定义HTML中hr样式-颜色-形状

    修改颜色,线条形状,粗细等... CSS代码: .zh_hr{ border:3px solid rgba(255, 255, 255, 0.50); margin-bottom: 2px; marg ...

  5. AutoResponder Reference

    Fiddler's AutoResponder tab allows you to return files from your local disk instead of transmitting ...

  6. vue 渲染流程

    1.DOM 节点树 高效的更新所有这些节点会是比较困难的,因为原生的DOM节点属性很多,渲染性能差. 2.虚拟 DOM “虚拟 DOM”是我们对由 Vue 组件树建立起来的整个 VNode 树的称呼. ...

  7. 解决itextpdf行高问题

    解法:PdfPCell.setFixedHeight(value);

  8. tomcat 热部署、热加载 精析

        1.前言 找了很多篇文章,没有一篇文章讲的清晰.明了,很多人只是会用,但不是能真正说明白,这年头找个懂理论的,真难! 2.热部署 原定义:tomcat处于运行状态时,能够监测webapps下的 ...

  9. Unable to read TLD "META-INF/c.tld" from JAR file

      Unable to read TLD "META-INF/c.tld" from JAR file CreationTime--2018年7月18日17点46分 Author: ...

  10. Timus 1149. Sinus Dances 打印复杂公式

    就是打印以下这两个复杂的式子: Let An = sin(1–sin(2+sin(3–sin(4+-sin(n))-) Let Sn = (-(A1+n)A2+n–1)A3+-+2)An+1 For ...