python3 functools partial 用于函数的包装器详解
一、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 用于函数的包装器详解的更多相关文章
- C++11多态函数对象包装器
[C++11多态函数对象包装器] 针对函数对象的多态包装器(又称多态函数对象包装器)在语义和语法上和函数指针相似,但不像函数指针那么狭隘.只要能被调用,且其参数能与包装器兼容的都能以多态函数对象包装器 ...
- C编译器、链接器、加载器详解
摘自http://blog.csdn.net/zzxian/article/details/16820035 C编译器.链接器.加载器详解 一.概述 C语言的编译链接过程要把我们编写的一个c程序(源代 ...
- Solr系列五:solr搜索详解(solr搜索流程介绍、查询语法及解析器详解)
一.solr搜索流程介绍 1. 前面我们已经学习过Lucene搜索的流程,让我们再来回顾一下 流程说明: 首先获取用户输入的查询串,使用查询解析器QueryParser解析查询串生成查询对象Query ...
- python设计模式之装饰器详解(三)
python的装饰器使用是python语言一个非常重要的部分,装饰器是程序设计模式中装饰模式的具体化,python提供了特殊的语法糖可以非常方便的实现装饰模式. 系列文章 python设计模式之单例模 ...
- Wordpress菜单函数wp_nav_menu各参数详解及示例
Wordpress菜单函数wp_nav_menu各参数详解及示例 注册菜单 首先要注册菜单,将以下函数添加至function.php函数里 register_nav_menus(array( ...
- GLSL-几何着色器详解跟实例(GS:Geometry Shader)[转]
[OpenGL4.0]GLSL-几何着色器详解和实例(GS:Geometry Shader) 一.什么是几何着色器(GS:Geometry Shader) Input Assembler(IA)从顶点 ...
- JMeter 后置处理器之正则表达式提取器详解
后置处理器之正则表达式提取器详解 by:授客 QQ:1033553122 1. 添加正则表达式提取器 右键线程组->添加->后置处理器->正则表达式提取器 2. 提取器配置介绍 ...
- WordPress函数:get_bloginfo()用法详解
描述 返回你博客的信息,这些信息可以用在任何地方的 PHP 代码中.这个函数,和 bloginfo() 一样,可以用来在模板文件的任何地方显示你博客的信息. 用法 <?php $bloginfo ...
- PHP函数call_user_func和call_user_func_array详解
今天在群里面,有个叫lewis的在问call_user_func_array的用法,因为之前一直没有用过,也不能说什么,于是看一下手册,发现是这么写的: call_user_func_array (P ...
随机推荐
- [Unity-6] GameObject有时候渲染不出来
问题描写叙述:在做游戏的过程中遇到了这样一个问题.一个怪物,假设让他出如今屏幕的中央是没问题的,可是让他出如今屏幕的边缘的位置发现他没有出现. 问题原因:经过检查发现,我给这个GameObject加入 ...
- OpenFace库(Tadas Baltrusaitis)中基于Haar Cascade Classifiers进行人脸检測的測试代码
Tadas Baltrusaitis的OpenFace是一个开源的面部行为分析工具.它的源代码能够从 https://github.com/TadasBaltrusaitis/OpenFace 下载. ...
- ArcGIS中的批量处理
在实际生产过程中,经常遇到批量处理数据的情况.在ArcGIS中,除自己写代码来处理这类问题外,它提供了一个批量处理的工具,在ToolBox对应的工具上右键即可选择批处理工具. 和单个处理方式一样,输入 ...
- ZH奶酪:通过CSS自定义HTML中hr样式-颜色-形状
修改颜色,线条形状,粗细等... CSS代码: .zh_hr{ border:3px solid rgba(255, 255, 255, 0.50); margin-bottom: 2px; marg ...
- AutoResponder Reference
Fiddler's AutoResponder tab allows you to return files from your local disk instead of transmitting ...
- vue 渲染流程
1.DOM 节点树 高效的更新所有这些节点会是比较困难的,因为原生的DOM节点属性很多,渲染性能差. 2.虚拟 DOM “虚拟 DOM”是我们对由 Vue 组件树建立起来的整个 VNode 树的称呼. ...
- 解决itextpdf行高问题
解法:PdfPCell.setFixedHeight(value);
- tomcat 热部署、热加载 精析
1.前言 找了很多篇文章,没有一篇文章讲的清晰.明了,很多人只是会用,但不是能真正说明白,这年头找个懂理论的,真难! 2.热部署 原定义:tomcat处于运行状态时,能够监测webapps下的 ...
- 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: ...
- 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 ...