Python拾趣009 修饰器@简介和简单应用

@ 修饰器

装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志、性能测试、事务处理等。装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量函数中与函数功能本身无关的雷同代码并继续重用。概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能。

引子

在写类的时候经常用到@staticmethod或@classmethod修饰符,这样就可以不需要实例化,直接类名.方法名()来调用。

所以修饰器用到好多地方的。

例子

"""
PyQt AND OpenCV
By LiNYoUBiAo
2020/4/19 19:49
"""
from functools import wraps

can_run = True


def decorator_name(f):
    @wraps(f)
    def decorated(*args, **kwargs):
        if not can_run:
            return "Function will not run"
        return f(*args, **kwargs)
    return decorated


@decorator_name
def func():
    return("Function is running")


print(func())
can_run = False
print(func())

运行结果:

Logging应用

"""
PyQt AND OpenCV
By LiNYoUBiAo
2020/4/19 19:56
"""
from functools import wraps


def logit(func):
    @wraps(func)
    def with_logging(*args, **kwargs):
        print(func.__name__ + "was called")
        return func(*args, **kwargs)
    return with_logging


@logit
def addition_func(x):
    return x+x


result = addition_func(4)

运行结果:

多谢,美。

参考:

  1. 从浅到深讲解python修饰器:https://www.cnblogs.com/wolf-yasen/p/11240500.html
  2. 谈谈python修饰器:https://www.jianshu.com/p/ab702e4d4ba7
  3. function decorators:https://stackoverflow.com/questions/739654/how-to-make-a-chain-of-function-decorators
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值