Python之装饰器与开发原则(开放封闭原则)

一.装饰器:(本质上是一个闭包)
   作用:(给一个现有的函数扩展功能)
   import time
   import random
   
   def sourceFunc():
       print("原始函数开始...")
       time.sleep(random.random())
       print("原始函数结束...")
   
   # 给原始函数扩展功能
   
   # def expendFunc():
   #     print("原始函数前扩展的功能...")
   #     sourceFunc()
   #     print("原始函数后扩展的功能...")
   #
   # expendFunc()
   
   # 让expendFunc函数使用于多个函数
   # def expendFunc(fun):
   #     print("原始函数前扩展的功能...")
   #     fun()
   #     print("原始函数后扩展的功能...")
   #
   # expendFunc(sourceFunc)
   
   # 给原始函数增加功能,但不改变原始函数的调用方式
   
   # def rewriteSource(fun):
   #     def expendFunc():
   #         print("原始函数前扩展的功能...")
   #         fun()
   #         print("原始函数后扩展的功能...")
   #     return expendFunc
   #
   # sourceFunc = rewriteSource(sourceFunc)
   # sourceFunc()
   #------------以上即是装饰器的形成过程------------------------

   # def rewriteSource(fun):
   #     def expendFunc():
   #         print("原始函数前扩展的功能...")
   #         fun()
   #         print("原始函数后扩展的功能...")
   #     return expendFunc
   #
   # @rewriteSource   # 语法糖:替代sourceFunc = rewriteSource(sourceFunc)
   # def sourceFunc():
   #     print("原始函数开始...")
   #     time.sleep(random.random())
   #     print("原始函数结束...")
   #
   # sourceFunc()
   
   # 如果sourceFunc函数带返回值,装饰器如何获取
   # def rewriteSource(fun):
   #     def expendFunc():
   #         print("原始函数前扩展的功能...")
   #         ret = fun()
   #         print("原始函数后扩展的功能...")
   #         return ret
   #     return expendFunc
   #
   # @rewriteSource   # 语法糖:替代sourceFunc = rewriteSource(sourceFunc)
   # def sourceFunc():
   #     print("原始函数开始...")
   #     time.sleep(random.random())
   #     print("原始函数结束...")
   #     return "原始函数的返回值"
   # res = sourceFunc()
   # print(res)
   
   # 如果原始函数还带有一个参数,装饰器该如何传入
   # def rewriteSource(fun):
   #     def expendFunc(arg):
   #         print("原始函数前扩展的功能...")
   #         ret = fun(arg)
   #         print("原始函数后扩展的功能...")
   #         return ret
   #     return expendFunc
   #
   # @rewriteSource   # 语法糖:替代sourceFunc = rewriteSource(sourceFunc)
   # def sourceFunc(arg):
   #     print("原始函数开始...")
   #     time.sleep(random.random())
   #     print("这是原始函数的参数:{}".format(arg))
   #     print("原始函数结束...")
   #     return "原始函数的返回值"
   # res = sourceFunc('我就是传入的参数')
   # print(res)
   
   # 原始函数带任意数参数
   # def rewriteSource(fun):
   #     def expendFunc(*args,**kwargs):
   #         print("原始函数前扩展的功能...")
   #         ret = fun(*args,**kwargs)
   #         print("原始函数后扩展的功能...")
   #         return ret
   #     return expendFunc
   #
   # @rewriteSource   # 语法糖:替代sourceFunc = rewriteSource(sourceFunc)
   # def sourceFunc(*args,**kwargs):
   #     print("原始函数开始...")
   #     time.sleep(random.random())
   #     print("这是原始函数的参数组--args:{};kwargs:{}".format(args,kwargs))
   #     print("原始函数结束...")
   #     return "原始函数的返回值"
   # res = sourceFunc('位置1','位置2','位置3',name='张三',age=18,job='teacher')
   # print(res)
二.开发原则:(开放封闭原则)
   开放:对扩展是开放的
        代码功能越多越强大,扩展代码段的功能是不变的追求
   封闭:对修改时封闭的
        代码可能在多个地方被调用,一但原代码被修改,每个被调用的
        地方均受到影响,牵一发而动全身,影响范围不可控制
       

猜你喜欢

转载自blog.csdn.net/qq_40199698/article/details/87894465