zoukankan      html  css  js  c++  java
  • 装饰器和闭包理解(一)

    '''
    @Descripttion: 
    @version: 
    @Author: 冯浩
    @Date: 2019-10-21 15:19:54
    @LastEditors: 冯浩
    @LastEditTime: 2019-10-21 16:02:34
    '''
    #例子一
    def deco1(func):# 装饰器
        def inner():
            print('装饰器内部函数')
        return inner
    
    #原始表达方式, 装饰器其实就是该方式的语法糖
    def example0():
        print('原始函数')
    
    print(id(example0))
    example0 = deco1(example0) #本行即为装饰器本质
    print(id(example0))
    print('*'*32)
    example0() #执行替换后的本函数
    
    #装饰器表达法,装饰器可以理解为函数调用的简化表达
    @deco1
    def example1():
        print('原始函数')
    print(
    '-'*32) example1() #执行装饰器表达后的本函数 '''
    执行结果如下:
    63866536 60649120 ******************************** 装饰器内部函数 -------------------------------- 装饰器内部函数 ''' 补充:example1()表是调用函数的执行结果,example1表示调用函数本身(函数并未执行)
    '''
    @Date: 2019-10-20 23:05:26
    @LastEditors: 冯浩
    @LastEditTime: 2019-10-21 23:58:33
    '''
    
    registry=[]
    def register (func):#装饰函数
        print('runnig register is %s'% func)
        registry.append(func)
        return func
    
    @register
    def f1():
        print('执行f1')
    
    @register
    def f2():
        print('执行f2')
    
    def f3():
        print('执行f3')
    
    def main():
        print('-'*32,'
    开始执行')
        print('已执行:', registry)
        f1()
        # f2()
        f3()
    
    if __name__ == "__main__":
        main()
    
    '''
    执行结果如下:
    runnig register is <function f1 at 0x00000000039FC1E0>
    runnig register is <function f2 at 0x00000000039FC268>
    --------------------------------
    开始执行
    已执行: [<function f1 at 0x00000000039FC1E0>, <function f2 at 0x00000000039FC268>]
    执行f1
    执行f3
    
    结论,装饰函数在导入模块时立刻执行,而被装饰函数只在明确调用时运行
    可以看到,f2未被调用,但是其装饰函数先行执行了.
    '''
  • 相关阅读:
    Python 数据驱动 unittest + ddt
    接口知识介绍
    python 爬虫
    python 接口测试(三)
    基于PCA和SVM的人脸识别系统-error修改
    二分查找算法
    JAVA中运用数组的四种排序方法
    [Matlab] Attempt to execute SCRIPT *** as a function
    第36讲 activityForResult
    第35讲 Activity入门和跳转
  • 原文地址:https://www.cnblogs.com/feng-hao/p/11714112.html
Copyright © 2011-2022 走看看