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

相关推荐

  • Ansible Conditionals & Loops

     一、条件语句     条件判断语句,就是根据某些变量的值来控制Ansible的执行流程。控制某些主机执行某些操作与不执行某些操作。根据某些操作结果,判断是否执行其它操作等等。     Ansible的条件判断语句只有 when 语句,结合变量使用才能显示出它的价值。when的用…

    Linux干货 2015-11-21
  • 文件系统的挂载使用总结

    文件系统使用 除根文件系统以外的文件系统创建后要使用需要先挂载至挂载点后才可以被访问,挂载点即分区设备文件关联的某个目录文件,挂载命令mount和 卸载命令umount; 挂载点: mount_point,作为被挂载的文件系统的访问入口; 作为挂载点需要满足三个条件:  (1)这个目录事先存在  (2)使用未被或不会被其他进程使用到的目录…

    系统运维 2016-11-19
  • ip子网划分

    ip子网划分 人们为了通信方便,给每台计算机分配了一个类似我们电话号码一样的标识地址。IP就好比一个人的指纹一样,在INTERNET中是独一无二的(公网中)。我们可以通过ip查询到使用该ip的主机。 现在的IP分为ipv4和ipv6。前者是32位二进制组成,为了防止IP不够用由此研发出后者ipv6,ipv6是由128位二进制组成。ipv6中包含ip的数量相当…

    Linux干货 2017-07-01
  • 几个有意思的小脚本

    ①.用脚本画一个圣诞树 效果 ②.用脚本画一个类似国际象棋的棋盘 半成品效果 再像这样在下面多写几个循环,就可以了,我这个方法太笨,全写完要截图的太多,就放一部分意思下 ③.编写一个脚本,打印出九九乘法表 效果 ④.编写一个脚本,可接收一个 1-7 的数字作为参数,用 if 和 case 两种方法实现根据输入的数字输出对应星期的英文 用if的方法 用case…

    2017-05-11
  • httpd 基础

      http(1) 开启httpd服务,注意selinux 和防火墙设置。出现错误查看系统日志和http错误日志。 进程间通信:IPC socket:套接字 IP:PORT Client <–> Server     Server: listen  &nb…

    Linux干货 2016-11-01
  • centos7 搭建SVN服务器

    运维常见的工作就是日常软件的安装和维护,SVN虽然被Git侵占了市场份额,但是仍然是高效简捷的源码管理工具。从日常软件的安装部署开始,熟悉一些Linux的常用命令。

    Linux干货 2018-03-26