装饰器:

  即是用一个函数去拓展另一个函数,同时遵循开放封闭原则

开放封闭原则

  对修改关闭,对拓展开放

  不允许修改源代码以及调用方式

以下是无参函数的基本格式

 def outer(func):
def wrapper(*args,**kwargs):
# 新功能
res=func(*args,**kwargs)
return res
return wrapper

无参函数的语法糖是

@装饰器函数名称 必须写在被装饰函数的正上方

而且装饰器的定义,必须在被装饰函数的上方

也可以使用多个装饰器函数给同一个函数装饰

@装饰器1

@装饰器2

def func()

  pass

装饰顺序是先装饰器2给func装饰,然后是装饰器1

调用的时候是装饰器1先执行,然后是装饰器2的代码,然后是func()

有参装饰器模板

def m_outter(file):
def outter(func)
def wrapper(*args,**kwargs):
#函数体代码
res=func(*args,**kwargs)
return res
return wrapper
return outter

上面是有参装饰器模板,使用m_outter函数给内部装饰器进行传值,

如果内部wrapper()需要借助外部函数给其传值,则使用有参装饰器,

有参数装饰器的语法糖

@m_ouuter(参数)

func  #被装饰函数

DAY 13 开放封闭原则的更多相关文章

  1. 【Python入门学习】闭包&装饰器&开放封闭原则

    1. 介绍闭包 闭包:如果在一个内部函数里,对在外部作用域的变量(不是全局作用域)进行引用,那边内部函数被称为闭包(closure) 例如:如果在一个内部函数里:func2()就是内部函数, 对在外部 ...

  2. 开放封闭原则(Open Closed Principle)

    在面向对象的设计中有很多流行的思想,比如说 "所有的成员变量都应该设置为私有(Private)","要避免使用全局变量(Global Variables)",& ...

  3. 开放-封闭原则(OCP)开-闭原则 和 依赖倒转原则,单一职责原则

    单一职责原则 1.单一职责原则(SRP),就一个类而言,应该仅有一个引起它变化的原因 2.如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会消弱或抑制这个类完成其他职责的能力. ...

  4. 开放封闭原则(OCP)

    开放封闭原则 转:http://baike.baidu.com/view/2493421.htm转:http://dev.csdn.net/article/38/38826.shtm 开放封闭原则(O ...

  5. Chapter 4.开放-封闭原则

    开放-封闭原则:是说软件实体应该可以扩展,但不可修改. 设计人员必须对于他设计的模块应该对哪种变化封闭做出选择,先猜测出最有可能发生的变化种类,然后构造抽象来隔离那些变化. 面对需求,对程序的改动是通 ...

  6. 浅谈Java的开放封闭原则

    写在前面 最近, 接手了一个新业务,系统的架构可圈可点.但有些地方让人望而生畏,有些代码臃肿难以维护,让人不敢恭维.于是,结合了Java的开放封闭原则,对其中一部分代码进行了重构优化. 先来看下以前系 ...

  7. C++ 设计模式 开放封闭原则 简单示例

    C++ 设计模式 开放封闭原则 简单示例 开放封闭原则(Open Closed Principle)描述 符合开放封闭原则的模块都有两个主要特性: 1. 它们 "面向扩展开放(Open Fo ...

  8. Observer观察者模式与OCP开放-封闭原则

    目录 场景引入 在联网坦克项目中使用观察者模式 总结 在学习Observer观察者模式时发现它符合敏捷开发中的OCP开放-封闭原则, 本文通过一个场景从差的设计开始, 逐步向Observer模式迈进, ...

  9. Python——day12 nonlcoal关键字、装饰器(开放封闭原则、函数被装饰、最终写法)

    一.nonlocal关键字 1.作用:将L与E(E中的名字需要提前定义)的名字统一 2.应用场景:如果想在被嵌套的函数中修改外部函数变量(名字)的值 def outer(): num=10 print ...

随机推荐

  1. Java笔记 #05# Java Native Interface

    参考资料:http://www.ntu.edu.sg/home/ehchua/programming/java/javanativeinterface.html(很详细) 看jdk源代码时,经常会看到 ...

  2. 复旦大学2017--2018学年第一学期(17级)高等代数I期末考试第六大题解答

    六.(本题10分)  设 $M_n(K)$ 为数域 $K$ 上的 $n$ 阶方阵全体构成的线性空间, $A,B\in M_n(K)$, $M_n(K)$ 上的线性变换 $\varphi$ 定义为 $\ ...

  3. HBase scan setBatch和setCaching的区别

    HBase的查询实现只提供两种方式: 1.按指定RowKey获取唯一一条记录,get方法(org.apache.hadoop.hbase.client.Get) 2.按指定的条件获取一批记录,scan ...

  4. 彻底删除windows残留启动引导

    在win7/Win8系统下安装其他系统或者一键重装系统后,安装的系统删除或者一键重装文件删除了,在windows启动管理器中还残留了启动引导选项,影响开机效率. 在系统配置中有些"引导&qu ...

  5. linux基础之awk

    gawk - pattern scanning and processing language 基本用法: gawk [options] 'program' FILE... program: PATT ...

  6. 【做题】agc006e - Rotate 3x3——分析&思维

    原文链接 https://www.cnblogs.com/cly-none/p/9800105.html 题意:给出一个三行\(n\)列的矩阵.问它能否由满足\(a_{ij} = 3(j-1) + i ...

  7. HTML5新技术FormData提交表单数据

    免去了你每次都要document.getElement的方式去获取input的表单值 传统方式 新技术表单数据提交 FormData使用注意 .无需调用setRequestHeader()方法 .要求 ...

  8. 详解java中的byte类型

    Java也提供了一个byte数据类型,并且是基本类型.java byte是做为最小的数字来处理的,因此它的值域被定义为-128~127,也就是signed byte.下面这篇文章主要给大家介绍了关于j ...

  9. 4th,Python三级菜单

    1. 运行程序输出第一级菜单 2. 选择一级菜单某项,输出二级菜单,同理输出三级菜单 3. 菜单数据保存在文件中 4. 让用户选择是否要退出 5. 有返回上一级菜单的功能 data = { '北京': ...

  10. 一个SQL查询出每门课程的成绩都大于80的学生姓名

    name   kecheng    fenshu 张三     语文     81 张三     数学     75 李四     语文     76 李四     数学     90 王五     ...