Python装饰器

转自:https://www.cnblogs.com/astropeak/p/9029104.html


装饰器例

def copy_to_clipboard_wrap(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        rtn = func(*args, **kwargs)
        Util.copy_to_clipboard(rtn)
        return rtn
from functools import wraps

def trace(name):
  def wrapper(func):
    @wraps(func) #名称修正
    def wrapped(*args, **kwargs):
      print('Enter %s. Args: %s, kwargs: %s' % (name, args, kwargs))
      rv = func(*args, **kwargs)
      print('Exit %s. Return value: %s' % (name, rv))
      return rv

    return wrapped
  return wrapper

@trace('area')
def area(height, width):
  print('area called')
  return height * width

area(2, 3)

结果为

Enter area. Args: (2, 3), kwargs: {}
area called
Exit area. Return value: 6

多重装饰

@decSec
@decFir
def foo():pass

等价于:

def foo():pass
foo = decFir(foo)
foo = decSec(foo)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值