zoukankan      html  css  js  c++  java
  • python函数装饰器基础知识

    函数装饰器是用于元编程的主要技术之一,它可以在源码中“标记”函数,以某种方式增强函数的行为。这是一项强大的功能,但若想掌握,必须理解闭包

    本节的最终目标是解释清楚装饰器的工作原理,包括最简单的注册装饰器和较复杂的参数化装饰器

    本节将讨论如下主题:

    • 装饰器的基本概念
    • 装饰器的基本使用

     

    装饰器的基本概念与使用

    先给出元编程的定义,元编程是一种编写计算机程序的技术,这些程序可以将自己看作数据,因此你可以在运行时对它进行内省、生成或修改。利用这一定义,可知装饰器可以用来修饰函数并

    扩展函数。

    1. 装饰器的基本作用

    对于装饰器而言,它是一个可调用的对象,其参数是另一个函数(被装饰的函数)。装饰器可能会处理被装饰的函数,然后把它返回,或者将其替换为另一个函数或可调用对象。

    有示例如下,假如有一个名为decorate的装饰器:

    1 @decorate
    2 def target():
    3     print("running")

    上述代码的效果与以下写法一样:

    1 def target():
    2     print("running")
    3 target = decorate(target)

    两种写法的最终结果一样:上述两个代码片段执行完毕后得到的target不一定是原来的那个target函数,而是decorate(target)的返回值

    装饰器通常会把函数替换为另一个函数。

    严格来说,装饰器只是语法糖。如上图所示,装饰器可以像常规的可调用对象那样调用,其实参数是另一个函数。

    2. 装饰器在何时执行

    装饰器在被装饰的函数定义之后立即运行,建立test_deco.py文件如下:

     

    把test.py当作脚本执行的结果如下:

    把test.py当作模块导入的执行结果如下:

    函数装饰器在导入模块时立即执行,而被装饰的函数只在明确调用的时候运行。

    综上,装饰器的一大特性是,能把被装饰的函数替换成其他函数。第二个特性是,装饰器在加载模块时立即执行。

     

  • 相关阅读:
    Tomcat启动提示At least one JAR was scanned for TLDs yet contained no TLDs
    elasticsearch 相关操作
    ES下载与安装
    分词器
    Go语言中import导入包时:点. 、下划线_ 、别名的用法
    删除某库中所有表
    yum 安装mysql
    chromedriver下载及配置
    前端库在Core Web项目中的引入和使用
    The database provider attempted to register an implementation of the 'IRelationalTypeMappingSource' service.
  • 原文地址:https://www.cnblogs.com/Yuanb/p/12107748.html
Copyright © 2011-2022 走看看