searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

Python中的装饰器

2023-05-16 08:09:20
8
0

一、装饰器的定义

    装饰器本质上是一个Python函数,可以让其他函数在不需要做任何代码改动的前提下增加额外的功能,装饰器的返回值也是一个函数对象。装饰器的使用场景有:插入日志、性能测试、事务处理、缓存、权限校验等。

二、装饰器的使用

def wrapper(func):  # func = holiday
    def inner(*args, **kwargs):
        print('在被装饰的函数执行之前做的事:比如查看今天的工作邮箱是否有待办事项')
        ret = func(*args, **kwargs)
        print('在被装饰的函数执行之后做的事:比如下班前检查电源插座的开关是否关闭')
        return ret
    return inner
 
 
@wrapper   # holiday = wrapper(holiday)
def holiday(day):
    ''' 这是一个放假通知 '''
    print('全体放假%s天'%day)
    return '好开心'

print(holiday.__name__)
print(holiday.__doc__)
 
print("--------------下面调用该函数看下效果-----------------------------")
holiday("6")


# 输出结果
inner
None
--------------下面调用该函数看下效果-----------------------------
在被装饰的函数执行之前做的事:比如查看今天的工作邮箱是否有待办事项
全体放假6天
在被装饰的函数执行之后做的事:比如下班前检查电源插座的开关是否关闭

 

上面这个例子中的holiday的函数名变成inner了,如果我们不想让函数名称改变可以加入一个常用的装饰器wraps,代码如下:

from functools import wraps

def wrapper(func):  # func = holiday
    @wraps(func)
    def inner(*args, **kwargs):
        print('在被装饰的函数执行之前做的事:比如查看今天的工作邮箱是否有待办事项')
        ret = func(*args, **kwargs)
        print('在被装饰的函数执行之后做的事:比如下班前检查电源插座的开关是否关闭')
        return ret
    return inner
 
 
@wrapper   # holiday = wrapper(holiday)
def holiday(day):
    ''' 这是一个放假通知 '''
    print('全体放假%s天'%day)
    return '好开心'

print(holiday.__name__)
print(holiday.__doc__)
 
print("--------------下面调用该函数看下效果-----------------------------")
holiday("6")


# 输出结果
holiday
 这是一个放假通知 
--------------下面调用该函数看下效果-----------------------------
在被装饰的函数执行之前做的事:比如查看今天的工作邮箱是否有待办事项
全体放假6天
在被装饰的函数执行之后做的事:比如下班前检查电源插座的开关是否关闭
0条评论
0 / 1000
孟****强
4文章数
0粉丝数
孟****强
4 文章 | 0 粉丝