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

相关推荐

  • 第二周 文件管理

    1.Linux上的文件管理类型命令都有哪些,其常用的使用方法及其相关示例演示 mkdir—— 创建目录  make directory 命令格式——mkdir [OPTION]… DIRECTORY… -p:自动按需创建父目录; -v:verbose,显示详细过程; -m MODE:创建目录直接给定权限,否则是默认权限; 注意:路径基…

    2017-12-10
  • ☞LVS

    LVS 概述 LVS工作类型 LVS NAT LVS DR(默认) Direct Routing带来的问题 限制响应模型的内核参数 LVS TUN LVS FULLNAT scheduling-method 静态调度算法 动态调度算法 CentOS 7 中的ipvs组件 安装ipvsadm程序 主要文件 ipvsadm命令 配置集群服务 NAT方法示例 DR…

    Linux干货 2016-10-26
  • etc的常见问答

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。 [root@localhost tuser1]# cp -r /etc/skel/ /home/tuser1 [root@localhost tuser1]# chmod -R go= /home/tuser1/ [root…

    2017-12-26
  • IP地址之IPv4

    一、概述   IP地址有IPv4和IPv6两个版本,目前我们通常所说的IP地址是指IPv4。   IP地址由32位的二进制数组合而成,为了方便人类记忆,将二进制转换成4个十进制的数值。   在这32位数据中分为网络号与主机号两个部分。 二、IP的分级   IP网段分为五个等级,其定义如下:   A类:规定前面…

    Linux干货 2016-02-14
  • Web服务,http协议。

    一·web   1。web是一种网站服务器,C/S架构,比较流行的Apache,Nginx,IIS。客户能够去服务器请求资        资源。   2.使用http协议,服务器html或者xml格式文件,客户浏览器访问资源(url)。   3.过程包括服务器套接字监听直到和客户套接字建立…

    Linux干货 2015-07-04
  • 配额实现

       1  启用配额限制 vim   /etc/fstab      UUID=”5263027d-f571-4c4a-98d8-930e41e0e265″  /home  ext4  usrquota,grpquota  0…

    Linux干货 2017-04-25