装饰器

作者: 小白快加油 | 来源:发表于2018-06-17 08:23 被阅读0次
    registry = [] # 注册处 #registry保存被@register装饰的函数引用
    
    def register(func):  # 寄存器 #register的参数是一个函数
        print('running register(%s)' % func) #为了演示,显示被装饰的函数
        registry.append(func) #把func存入registry
        return func #返回func:必须返回函数;这里返回的函数与通过参数传入的一样0
    
    @register #f1和f2被@register装饰
    def f1():
        print('running f1()')
    
    @register
    def f2():
        print('running f2()')
    
    def f3(): #f3没有装饰
        print('running f3()')
    
    def main(): #main显示registry,然后调用f1(),f2(),f3()
        print('running main()')
        print('registry ->', registry)
        f1()
        f2()
        f3()
    
    if __name__ == '__main__':
        main() #只有把registration.py当做脚本运行得到的输出如下 
    
    
    

    这里主要想强调,函数装饰器在导入模块时立即执行,
    而被装饰的函数只在明确调用时运行。

    这突出了Python程序员所说的导入时和运行时之间的区别

    把registration.py当做脚本运行得到的输出是

    running register(<function f1 at 0x0000000002825A60>)
    running register(<function f2 at 0x0000000002825AE8>)
    running main()
    registry -> [<function f1 at 0x0000000002825A60>, <function f2 at 0x0000000002825AE8>]
    running f1()
    running f2()
    running f3()
    

    相关文章

      网友评论

          本文标题:装饰器

          本文链接:https://www.haomeiwen.com/subject/lziieftx.html