• 装饰器和闭包理解(一)


    '''
    @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未被调用,但是其装饰函数先行执行了.
    '''
  • 相关阅读:
    齐次和线性
    数组指针/指针数组
    坐标转换矩阵
    【转】GMM与K-means聚类效果实战
    利用虚函数实现多态的方式:动态绑定
    类型限定符volatile
    《剑指offer》查找二维数组内元素 c++
    windows下使用命令行编译、链接C++源文件
    关于该博客的美化
    vimium快捷键修改
  • 原文地址:https://www.cnblogs.com/feng-hao/p/11714112.html
Copyright © 2020-2023  润新知