python装饰器1

简单介绍装饰器(注意格式)

高阶函数:至少满足下面两个条件中的一个
1:接受一个或多个函数为参数
2:输出一个函数
柯里化:将原来接受两个参数的函数变成新的接受一个参数的函数的过程。新的函数返回一个以原来第二个参数为参数的函数。z=f(x,y)—>z=f(x)(y)

装饰器(无参)
1:是一个函数
2:函数作为它的形参
3:返回值也是一个函数
4:可以使用@functionname方式调用
装饰器是对传入函数的功能的装饰(功能增强)

装饰器的基本形式:
def logger(fn):
def wrapper(*args,**kwargs):
ret=fn(*args,**kwargs)
return ret
return warp
@logger
def add(x,y):
return x+y
logger函数为装饰器函数,对add函数进行功能性的增强。
@functionname下紧跟着的为被装饰的函数。

装饰器会替换掉原函数对象的属性,需要使用一个functools模块进行保护。
用上面的例子
from functools import wraps

def logger(fn):
@wraps(fn)
def wrapper(*args,**kwargs):
ret=fn(*args,**kwargs)
return ret
return warpper
@logger
def add(x,y):
return x+y

带参装饰器:
1:是一个函数
2:函数作为它的形参
3:返回值是一个不带参的装饰器函数
4:使用@functionname(参数列表)方式调用
5:可以看做在装饰器外层又加了一层函数

from functools import wraps

def logger(f):
def _logger(fn):
@wraps(fn)
def wrapper(*args,**kwargs):
ret=fn(*args,**kwargs)
return ret
return warpper
return _logger
@logger
def add(x,y):
return x+y
装饰器的用途:
装饰器是AOP(Aspect Orientend Programming)面向切面编程的思想体现。
面向对象往往需要通过继承或者组合依赖等方式调用一些功能,这些功能的代码往往可能在多个类中出现,例如logger,这样造成代码的重复,增加了耦合。logger的改变影响所有使用它的类或方法。而AOP在需要的类或方法上切下,前后的切入点可以加入增强的功能。让调用者和被调用者解耦。这是一种不修改原来的业务代码,给程序动态添加功能的技术。例如logger函数功能就是对业务函数增加日志的,而业务函数中应该把与业务无关的日志功能剥离干净。
装饰器的应用场景:
日志、监控、权限、设计、参数检查、路由等处理。
这些功能与业务功能无关,很多业务都需的公共功能,适合独立出来,需要时对目标对象增强。

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/88007

(0)
10590628461059062846
上一篇 2017-10-22 19:51
下一篇 2017-10-23 08:54

相关推荐

  • LAMP—Apache编译安装

    一、前言:   httpd-2.2与 httpd-2.4版本相比增加了许多新特性:    1、MPM支持运行时装载    2、支持event    3、支持异步读写    4、支持每模块每目录使用不同的日志级别    5、每请求配置<IF&gt…

    Linux干货 2015-06-15
  • 当Web访问性能出现问题,如何深探?

    对运维或开发工程师来说,遇到访问性能问题时,最先需要定位的是问题出现在哪个环节,是网络的问题,服务端的问题,还是客户端的问题? 往往技术人员喜欢把精力放在保障后端服务的可用性方面,而对前端界面是否能正常装载,是否能完整渲染不是太关心。但从业务的角度来说,界面承载的才是最终的业务,业务是通过人机交互来实现的。 日常我们遇到哪些场景需要定位访问性能瓶颈? ·不同…

    系统运维 2017-01-09
  • 新的旅途

    三月末的北京已经让人感觉有些炎热,这是我第一次来北京。对我而言这是我人生的另一个起点,押上了我所有骄傲承载着我的梦想对未来所有的期望。这是一场豪赌,新的旅途,从今天开始。

    2018-03-26
  • 文本处理三剑客之sed

    文本处理三剑客之sed 一、处理文本的工具sed 概念: Stream EDitor, 行编辑器 v sed是一种流编辑器,它一次处理一行内容。处理时,把 当前处理的行存储在临时缓冲区中,称为“模式空间”( pattern space),接着用sed命令处理缓冲区中的内容 ,处理完成后,把缓冲区的内容送往屏幕。接着处理下一 行,这样不断重复,直到文件末尾。文…

    Linux干货 2016-08-12
  • Linux命令帮助的获取

    帮助命令 1. 使用帮助命令和帮助选项来获取帮助 2. 使用man来查看命令使用手册(manual) 3. 使用info来查看命令的信息页 4. 程序自身的帮助文档(README/INSTALL/ChangeLog) 5. 程序官方文档(官方站点:Documentation) 6. 发行版的官方文档…

    Linux干货 2016-06-01
  • 创建CA 和申请证书

    创建CA 和申请证书1生成私有CA的私钥:(umask 066;openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)注:CA的私钥文件必须放在/etc/pki/CA/private/cakey.pem 这个路径里2创建序列号 ,数据库文件touch  /etc/pki/CA/index.tx…

    Linux干货 2017-07-17