• 装饰器二:无参装饰器和有参装饰器


    装饰器的目的:

      装饰器就是在不修改被装饰对象源代码调用方式的前提下为其添加新功能。

    无参装饰器模板:

     1 #此处的outsider为装饰器,可将其至于被装饰函数顶部,利用@outsider的方式来装饰被装饰函数
     2 def outsider(func):
     3     """
     4     :param func: 被装饰函数名
     5     :return: 返回outsider.wrapper的内层地址
     6     """
     7     def wrapper(*args,**kwargs):
     8         """
     9         :param args:被装饰函数本身所需参数 
    10         :param kwargs:被装饰函数本身所需参数 
    11         :return: 被装饰函数的返回值
    12         """
    13         #此处可增加新的业务逻辑。。。
    14         res = func(*args,**kwargs)
    15         #此处可增加新的业务逻辑。。。
    16         return res
    17     return wrapper

    有参装饰器模板:

     1 def 有参装饰器(x,y):
     2     """
     3     :param x: 有参装饰器参数1
     4     :param y: 有参装饰器参数2
     5     。。。
     6     :return: 返回有参装饰器.outsider的内存地址
     7     """
     8     def outsider(func):
     9         """
    10         :param func: 被装饰函数名
    11         :return: 返回outsider.wrapper的内层地址
    12         """
    13         def wrapper(*args,**kwargs):
    14             """
    15             :param args:被装饰函数本身所需参数
    16             :param kwargs:被装饰函数本身所需参数
    17             :return: 被装饰函数的返回值
    18             """
    19             #此处可增加业务逻辑。。。
    20             res = func(*args,**kwargs)
    21             #此处可增加业务逻辑。。。
    22             return res
    23         return wrapper
    24     return outsider
    25 
    26 
    27 """
    28 有参装饰器调用方式(以@有参装饰器(x=1,y=2)为例):
    29     步骤一:先执行 有参装饰器(x=1,y=2),返回outsider
    30     步骤二:组成@outsider的无参装饰器
    31     步骤三:在执行@outsider的无参装饰器的代码,返回wrapper
    32     步骤四:在执行新增的业务逻辑与被装饰函数,并返回res
    33 """
    34 @有参装饰器(x=1,y=2)
    35 def 被装饰对象():
    36     pass

    有参装饰器warps:注意python提供的有参装饰器wraps需要导入

     1 from functools import wraps
     2 
     3 def outsider(func):
     4     """
     5     :param func: 被装饰函数名
     6     :return: 返回outsider.wrapper的内层地址
     7     """
     8     @wraps(func)    ###将原函数func的所有内置函数均添加到wrapper函数中,目的是将闭包函数wrapper伪装的与原函数func完全一致###
     9     def wrapper(*args,**kwargs):
    10         """
    11         :param args:被装饰函数本身所需参数
    12         :param kwargs:被装饰函数本身所需参数
    13         :return: 被装饰函数的返回值
    14         """
    15         #此处可增加业务逻辑。。。
    16         res = func(*args,**kwargs)
    17         #此处可增加业务逻辑。。。
    18         return res
    19     return wrapper
  • 相关阅读:
    POJ
    巧得int(4字节)最大最小值
    POJ
    POJ
    2018牛客暑期多校训练第三场——C Shuffle Cards(rope大法)
    共享一些知识点的学习地址
    webstorm的各种快捷键配置
    Remote Debugging Chrome 结合Genymotion模拟器的移动端web真机调试
    支持新版chrome,用webstorm编译形成css和sourcemap,调试sass和less源文件
    最新版phonegap3.5.1环境搭建
  • 原文地址:https://www.cnblogs.com/xjklmycw/p/15025532.html
Copyright © 2020-2023  润新知