zoukankan      html  css  js  c++  java
  • 装饰器详解

    引用https://www.cnblogs.com/jixuege-1/p/5779464.html

    从字面意思来看,器代表函数的意思,可以说,装饰器本身就是函数,都是用def语法来定义的。

    装饰器:

    定义:本质是函数,(装饰其他函数)

    为其他函数添加附加功能。

    ①先来看个简单的,在没学函数之前,我想给定义的函数打个日志,写法如下:

     1 def  test1():
     2     pass
     3     print('logging')
     4 
     5 def test2():
     6     pass
     7     print('logging')
     8 #调用
     9 test1()
    10 test2()

    ②接下来学了函数,我就把打日志定义成一个函数

    def logger():
        print('logging')
    
    def  test1():
        pass
        logger()
    
    def test2():
        pass
        logger()
    #调用
    test1()
    test2()

    假设我写的函数已经上线运行了,某一天,我有个需求,在这个里面新增一个功能,那怎么去做这个事?

    最简单的就是:挨个找到100个函数,加上去。但是问题是程序已经运行了,我刚才操作是修改我程序的源代码,会有风险发生。

    所以说,我要新增一个功能,不能够修改函数的源代码,函数一旦写好了,原则上不能动源代码了。

    所以就有了下面的原则:

    • 不能修改被装饰函数的源代码。
    • 不能修改被装饰的函数的调用方式。装饰器对于被装饰函数是完全透明的。他没有动我的源代码,我该怎么调用运行就怎么运行。
  • 相关阅读:
    Linux下编译LibCURL
    Linux下编译OpenSSL
    Linux下编译UnixODBC
    Linux下编译Boost
    MySQL存储引擎【InnoDB、MyISAM、Memory】
    MySQL数据库MyISAM和InnoDB存储引擎的比较
    MySQL存储引擎MyISAM与InnoDB的优劣
    14款经典的MySQL客户端软件
    MySQL 数据类型
    MySQL数据库的基本数据类型
  • 原文地址:https://www.cnblogs.com/joneylulu/p/10261859.html
Copyright © 2011-2022 走看看