要学习装饰器,首先要知道闭包的东西。不过这里不再说闭包的东西了。

我们假设一个场景:假如在公司有多个开发部门,A、B....。现在A部门开发出了一个功能,然后其他部门去调用A部门开发的功能。

比如: 如下f1、f2...,是由A部门来开发,然后其他部门使用。

def f1():print('f1')def f2():print("f2")...

然后有一天根据业务需要,需要在每个方法添加验证,也就是在执行功能前进行身份验证。

这个时候想必大家心里也都有方法。

比如 在f1 函数里面直接修改该代码加上验证。或者把验证方法提取出来,封装成哥函数。在调用f1之前先调用验证方法。如果用这两方法来修改的话,那么在其他部门调用的时候也需要修改调用方法。

def f1():#验证print('f1')

上面的两种方法中虽然能实现要求,但是写代码要遵循 开放封闭 原则,虽然在这个原则是⽤的⾯向对象开发,但是也适⽤于函数式编程,简单来说,它规定已经实现的功能代码不允许被修改,但可以被扩展。

我再说一种用闭包实现的方法。

def w1(fn):def inner():print("验证中---")fn()return innerdef f1():print("f1")f1 = w1(f1)
# 调用的时候也是使用 f1()

说一下这个实现原理。

w1函数是要验证的代码,Python在解释的时候从上到下扫描,然后开辟了两个内存块,并且有两个变量 w1和f1分别指向对应的内存块。(如上图A所示)

在执行到 f1 = w1(f1) 的时候,w1函数里面还有个函数的定义,那么在 w1里面开辟一个内存(上图右面w1里面蓝色的框),并且里面有个变量f1。这个时候 w1(f1) 执行完后返回了inner函数的地址,也就是上图右边蓝色框的地址,并且把f1函数的地址指向了蓝色框。

所以根据上面的代码在执行 f1() 的时候 首先执行f1新指向的蓝色框,然后再执行蓝色框里面指向的旧f1的代码。

这样就能达到在f1里面加上新的代码了。其实这种方法就是闭包实现的,那么其实还有其他方法,也就是要说的装饰器,首先开一下 用装饰器怎么实现。

def w1(func):print("----------w1----------")def inner():print("inner")func()return inner@w1
def f1():print("f1")print("执行-------")
f1()

只需要在 f1函数定义前面加上 @w1 就行了。这就是装饰器!

Python装饰器(一)相关推荐

  1. python简单装饰器_简单介绍Python装饰器(一)

    装饰器的作用 相信大家在 探索过程中已经了解装饰器的作用,也有很多花里胡哨的介绍. 这次小冰也来讲解一下关于Python装饰器的一些小知识. 它的作用: 性能测试 日志 安全验证 ...... 相信大 ...

  2. Python装饰器的神奇功能:自动打印每个方法耗时

    问题: 运行代码时,尤其对于大型项目需要分析每个环节方法耗时的.每个方法前后都写计算耗时及日志打印太繁琐了,而且代码不精简. 解决: Python装饰器类似于Spring的 AOP(Aspect Or ...

  3. python装饰器教学_Python装饰器学习(九步入门)

    这是在Python学习小组上介绍的内容,现学现卖.多练习是好的学习方式. 第一步:最简单的函数,准备附加额外功能 # -*- coding:gbk -*- '''示例1: 最简单的函数,表示调用了两次 ...

  4. 简单介绍python装饰器

    这篇文章简单介绍一下python装饰器,希望对你们有所帮助. 简单正常python例子: def up(text):return text.upper() #转成大写 def lo(text):ret ...

  5. Python装饰器是什么?使用Python装饰器实现计算程序(函数)运行时间的功能

    Python装饰器是什么?使用Python装饰器实现计算程序(函数)运行时间的功能 目录

  6. python 装饰器示例

    python 装饰器示例 import timedef decorator(func): # 传函数def wrapper(*args, **kwargs): # 传参数(也可以传固定参数)start ...

  7. [转]python 装饰器

    以前你有没有这样一段经历:很久之前你写过一个函数,现在你突然有了个想法就是你想看看,以前那个函数在你数据集上的运行时间是多少,这时候你可以修改之前代码为它加上计时的功能,但是这样的话是不是还要大体读读 ...

  8. python装饰器与闭包_Python 装饰器和闭包

    Python 装饰器和闭包 装饰器是 Python 中常见的语法糖,这篇文章讲了闭包和装饰器的原理,并且分析了函数中变量的作用域,以及尝试总结了常见的坑. 装饰器基础 首先来看看装饰器的定义:装饰器本 ...

  9. 利用世界杯,读懂 Python 装饰器

    Python 装饰器是在面试过程高频被问到的问题,装饰器也是一个非常好用的特性, 熟练掌握装饰器会让你的编程思路更加宽广,程序也更加 pythonic. 今天就结合最近的世界杯带大家理解下装饰器. 德 ...

  10. Python 装饰器记录总结 (终极版)

    Python 装饰器记录总结 (终极版) 原文链接:http://magicroc.com/2017/04/10/Python装饰器记录总结/ 装饰器是一个函数,一个用来包装函数的函数,装饰器在函数申 ...

最新文章

  1. 思科服务器查看生成树协议,CISCO中生成树协议的配置
  2. 如何在钉钉上开发自己的应用_神操作!老妈让我告诉老板,双十一买钉钉。
  3. Goldengate的拆分与合并
  4. InstallSield更新包快速入门文档----感谢原作者ㄣ齊¨彡仯乄的无私提供
  5. Spring4.x()--Spring的Jdbc事务-零配置
  6. Python实现一条基于POS算法的区块链
  7. form表单input使用disabled后提交不能获取表单值的解决方法
  8. 放下十样东西,你会更优秀!
  9. 层级 z-index 透明opacity
  10. 字节码指令之算术指令
  11. 外卖程序_淘宝客系统_淘客小程序-淘客系统,外卖返利程序,外卖程序,返利程序
  12. java 跨平台的等宽字体_值得推荐的优秀编程字体/代码等宽字体收集(转)
  13. python下载安装教程(官网)
  14. 《从容一生》俞敏洪 书摘
  15. 注意力测试软件系统,注意力评估训练系统
  16. css中相对长度单位_看看CSS中的长度单位
  17. kali 更新后出现乱码的解决方案
  18. linux小记 查看dd进度,linux小记:查看dd进度
  19. python-非零整数代表True
  20. web前端进阶<7>:3d图像翻转效果

热门文章

  1. c语言中 字母对应的数值,C语言编程:求下式中每个字母所代表的数字
  2. 永不休眠怎么设置_电脑休眠后应该怎样唤醒?
  3. sql算术运算符_SQL中的算术运算符
  4. Castor xsd生成java_java – Castor可以处理从基础XSD导入的多个XSD生成类吗?
  5. java中intvalue_Java Float类intValue()方法与示例
  6. Redis 持久化——混合持久化
  7. Java中的一些坑,汇总篇(2万字)
  8. 阿里Java开发手册——如何优化数据库?
  9. AndroidStudio使用入门
  10. pyqt5让主窗口居中显示(显示在显示器的中间位置)