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 ...
随机推荐
- PHP 使用mysql 与 mysqli 连接Mysql数据库
代码很简单直接上了 <?php /** * @Author: HTL * @Email: Huangyuan413026@163.com * @DateTime: 2015-05-14 16:0 ...
- 在Ubuntu 桌面版 12.04 LTS配置sftp
第一步:检查vsftpd是否安装了 root@hy-Aspire-SA10:~# rpm -qa|grep vsftpd 没有输出,说明没安装. 第二步:安装vsftpd root@hy-Aspire ...
- php平滑升级
php平滑升级 1.既然是平滑升级,是不需要宕机,也不需要停止服务,是不存在关闭网站的说法 2.而升级最后的重启,重启的是PHP加载的配置文件,不影响你当前运行的网站 3.php-fpm是属于Fast ...
- C# Lambda表达式 基础
什么是Lambda 表达式? "Lambda表达式"实际上是一个方法,只不过该方法是一个匿名方法(就是没有名字的方法(函数),就是说只有在定义的时候能调用,在其他地方就不能调用了) ...
- Discuz常见大问题-如何允许用户插入视频-如何自己在页面中插入视频
从视频的下面分享中获取html代码 然后粘贴到你创建页面的指定位置(注意从优酷复制的视频宽度和高度可能比较小,你可以自己调整,或者占据100%) 最终的实现效果
- springboot项目打包提示Unable to find a single main class from the following candidates错误
提示Unable to find a single main class from the following candidates错误的原因是会从所有代码里面扫描包括main方法的类,找到多个类就报 ...
- js绝招
1.JS判断 function IsDigit(cCheck) { //判断是否是数字return (('0'<=cCheck) && (cCheck<='9')); } ...
- Class.forName和registerDriver的区别
我们都知道JDBC的代码怎么写,比如以MySQL JDBC为例 //注册JDBC驱动 Class.forName("com.mysql.jdbc.Driver"); //然后就可以 ...
- exception ORA-00918: 未明确定义列
exception ORA-00918: 未明确定义列 CreateTime--2018年5月9日16:08:48 Author:Marydon 1.错误代码展示 SELECT G.* FROM ...
- eclipse no java machine vitual was found
eclipse no java machine vitual was found CreateTime--2018年4月27日10:41:20 Author:Marydon 1.错误提示 2.问题 ...