Python装饰器的定义:在代码运行期间在不改变原函数定义的基础上,动态给该函数增加功能的方式称之为装饰器(Decorator)

装饰器的优点和用途:

1. 抽离出大量函数中与函数功能本身无关的的雷同代码并继续重用。

2. 使用装饰器可以将函数“修饰”为完全不同的行为,可以有效的将业务逻辑正交分解,如用于将权限与身份验证从业务中独立出来。

3. 如果一个函数需要一个功能,且这个功能可以被使用在很多函数上,或是函数并不是自己实现,那可以写个装饰器来实现这些功能。

概况来说,装饰器的作用就是为已经存在的对象添加一些额外的功能。

在学习如何运用装饰器前我们先来学习以下几个知识点:

变量的作用域:

在python中,函数会创建一个自己的作用域或称之为命名空间,结合以下示例来展示函数命名空间的作用域。

示例代码1:

2.变量解析规则:

在python的作用域规则里面,创建变量时一定会在当前作用域里创建同样的变量,但访问或修改变量时,会在当前作用域中查找该变量,如果没找到匹配的变量,就会依次向上在闭合作用域中进行查找,所以也可以在函数中直接访问全局变量。

示例代码2:

3.变量的生存空间:

变量不仅仅是存在于一个个的命名空间中,它们还都有自己的生存周期,全局变量的生存周期是在整个程序执行期间有效,而局部变量的生存周期只在当前作用域中有效,一旦这个作用域不存在了,比如函数执行退出了,变量的生存周期就结束了。

示例代码3:

4.嵌套函数:

定义:嵌套函数就是在函数里面定义函数,而且现有的作用域和变量生存周期依旧不变。

说明:在python里,函数就是对象,它也只是一些普通的值而已。也就是说你可以把函数像参数一样传递给其他的函数或者说从函数了里面返回函数。

示例代码4:

嵌套函数返回函数不加()表示返回函数对象,如下示例5所示:

示例代码5:

5.函数作为变量:

python中函数可以作为参数来传递

示例代码6:

6.闭包:

定义:如果一个函数定义在另一个函数的作用域内,并且引用了外层函数的变量,则该函数称为闭包。

一个函数返回的函数对象,这个函数对象执行需要依赖外部函数的变量值,这个时候函数返回的实际内容如下:

1.函数对象

2.函数对象执行需要使用的外部变量和变量值。

简而言之:闭包就是返回一个函数和一个函数执行所需要的外部变量。

示例代码7:

上例中的inner()函数就是一个闭包,它本身也是一个函数,而且还可以访问本身之外的变量。

每次函数outer被调用时,inner函数都会被重新定义,示例代码7每次返回的函数inner结果都一样,因为name没变。如下例所示,我们将函数稍微改动

一下,结果就不一样了。

示例代码8:

学习了以上6个小知识点,下面开始学习装饰器。

装饰器的定义:

装饰器其实就是一个闭包,把一个函数当做参数后返回一个替代版函数。

装饰器分类:

装饰器分为无参数decorator和有参数decorator

无参数decorator:生成一个新的装饰器函数

有参数decorator:装饰函数先处理参数,再生成一个新的装饰器函数,然后对函数进行装饰。

装饰器的具体定义:

1、把要装饰的方法作为输入参数;

2、在函数体内可以进行任意的操作;

3、只要确保最后返回一个可执行的函数即可(可以是原来的输入参数函数,也可以是一个新函数)

装饰器学习七步法:

第一步:最简单的函数,准备附加额外功能

第二步:使用装饰函数在函数执行前和执行后分别附加额外功能

解析:

1.myfunc = deco(myfunc)执行结果:

before myfunc() called.

myfunc()called.

after myfunc() called.

2.第一次调用myfunc()执行结果:

myfunc()called.

3.第二次调用myfunc()执行结果:

myfunc()called.

从第2和第3次调用myfunc函数来看,并没有实现每次调用都返回第1次调用的效果,那么我们要实现每次调用都带有附加功能的效果,我们后面会=逐步实现。

第三步:使用@符号来装饰函数

第四步:使用内嵌包装函数来确保每次新函数都被调用

上面是实现了1个函数使用装饰器的例子,下面演示2个函数分别使用装饰器的实例:

说明:使用装饰器的函数之间变量不会互相影响,等于每次调用都会重新生成一个_deco函数。

第五步:实现对带参数的函数进行装饰

第六步:对参数数量不确定的函数进行装饰

第七步:装饰器带可变参数

装饰器顺序:

当同时对一个函数使用多个不同的装饰器进行装饰时,这个时候装饰器的顺序就很重要了。

代码示例:

@A

@B

@C

def f():

pass

等价于:

f = A(B(C(f)))

python中修饰器的优点和作用_Python入门基础教程之装饰器相关推荐

  1. python基础教程:装饰器

    1. 函数 在python中,函数通过 def关键字.函数名和可选的参数列表定义.通过 return关键字返回值.我们举例来说明如何定义和调用一个简单的函数: >>> def foo ...

  2. python基础教程运行程序_Python入门基础教程:WSGI

    原标题:Python入门基础教程:WSGI WSGI 简介 WSGI 是什么 WSGI 是 Python Web Server Gateway Interface 的缩写,是描述 Web 服务器与 P ...

  3. python中修饰器的优点和作用_python 装饰器

    1. 装饰器装饰器其实是一个函数,作用是装饰其他函数 装饰器的特点:1. 不改变被装饰的函数的源代码的情况下添加函数的功能 2. 不改变被装饰的函数的调用方式 装饰器的组成方式:高阶函数+嵌套函数 1 ...

  4. python中修饰器的优点和作用_Python装饰器(你想知道的这里都有)

    1. 装饰器的定义 就是给已有函数增加额外功能的函数,它本质上就是一个闭包函数. 装饰器的功能特点: 不修改已有函数的源代码 不修改已有函数的调用方式 给已有函数增加额外的功能 闭包和装饰器的区分: ...

  5. python中try语句的用法和作用_python基础知识三——try与except处理异常语句

    try/except介绍 与其他语言相同,在python中,try/except语句主要是用于处理程序正常执行过程中出现的一些异常情况,如语法错(python作为脚本语言没有编译的环节,在执行过程中对 ...

  6. python中使用函数的优点是什么_python函数式编程是什么?

    在以下的文章之中我们来了解一下什么是python中的函数式编程.了解一下python中函数式编程是什么意思,以及python编程函数能应用在什么地方. 函数式编程 函数是Python内建支持的一种封装 ...

  7. python基础教程:装饰器的高级应用

    装饰器和装饰器模式 装饰器模式是面向对象的一种设计模式,支持将行为动态增加到已经存在的对象上.当装饰一个对象的时候,就表示独立与其他类实例对象,为该对象扩展了新的功能. python的装饰器不是装饰器 ...

  8. python语言的特点有没有面向过程_Python 入门基础之面向对象过程-面向过程概述...

    首先说明一下,python既是面向过程的语言,也是面向对象的语言,所以说python很灵活. 一句话简单说一下什么叫做面向对象编程OOP(object-oriented programing):面向对 ...

  9. python入门图谱_Python入门基础教程图

    一张图带我们入门Python基础教程 啄木鸟社区上原始翻译后绘制的,最早这个图是出现在(链接已失效) "这个图太棒了,有编程基础的人一下子就了解 Python 的用法了.真正的 30 分钟上 ...

最新文章

  1. 对 makefile 中 .SECONDARY 的学习体会
  2. Web 数据存储总结
  3. 信标组的磁标安装长度
  4. require(os)
  5. python概率游戏_看得见概率,可视化讲解概率学基础(附带python代码)
  6. github地址持续收集
  7. 黄金分割法求极值 matlab,利用matlab实现黄金分割法求极值问题-北京理工大学-机械优化设计.doc...
  8. UNIX发展史(BSD,GNU,linux)(转)
  9. 华东师范大学计算机考研参考书,华东师范大学计算机科学与技术研究生考试科目和考研参考书目...
  10. Android App Bundle 和Unity AAB BundleTools
  11. 【azkaban】开启进程秒退
  12. 详解平板电脑和笔记本的区别
  13. 【Unity】在Unity中实现扫描二维码 生成二维码功能
  14. oracle 表添加一列
  15. (41.1)【JWT-KID漏洞】KID之目录遍历、命令注入、SQL注入
  16. atan2函数的用法
  17. Flutter-实现图片圆角的几种方式
  18. QGIS将经纬度坐标转成点
  19. 2020,焦虑与希望
  20. [附源码]SSM计算机毕业设计网上零食商城JAVA

热门文章

  1. win7安装python3.6_Win7 64位下python3.6.5安装配置图文教程
  2. python 干什么工作具有明显优势-科多大数据告诉你Python为什么这么牛?学习python有什么优势?...
  3. python能做什么-普通小白学会Python到底具体能做什么呢?
  4. python就业方向-连小学生都在学的Python,究竟就业方向有哪些?
  5. python入门经典100题-Python3基础训练经典100题(带答案)下载
  6. python是干什么用的-python是做什么用的 python有什么用 - 驱动管家
  7. 如何自学python-如何自学Python编程呢?老男孩Python学习方法
  8. 干货 | 语音识别类产品细分及其应用场景
  9. python读取mysql数据库行数_使用python读取mysql数据库并进行数据的操作
  10. php怎么输出汉字大写的时间,php汉字转首字母大写的方法是什么