Python 装饰器

# -*- coding:utf-8 -*-
# 增强now()函数的功能,比如,在函数调用前后自动打印日志,但又不希望修改now()函数的定义,
# 这种在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator)。
# 本质上,decorator就是一个返回函数的高阶函数,
# 装饰器的主要功能在于不改变原有函数极其调用的基础上扩展函数功能。
import time
import functools


def metric(fn):
   @functools.wraps(fn)
   def wrapper(*args, **kw):
      start = time.time()
      print('%s exectued in %s ms' % (fn.__name__, 1000*(time.time() - start)))
      return fn(*args, **kw)
   return wrapper


@metric
def fast(x, y):
   time.sleep(0.0012)
   return x + y


@metric
def slow(x, y, z):
   time.sleep(0.1234)
   return x * y * z


f = fast(11, 22)
s = slow(11, 22, 33)
print(f)
print(s)
if f != 33:
   print('测试失败!')
elif s != 7986:
   print('测试失败!')


def log(text=''):  
   def test_log(func):
      @functools.wraps(func)
      def inner(*args, **kw):
         print('%s begin call: %s' % (text, func.__name__))
         c = func(*args, **kw)
         print('%s end call %s ' % (text, func.__name__))
         return c
      return inner
   return test_log


@log()  # 此处如果没有()将无法执行
def f():
   pass


@log('execute')
def d():
   pass


f()
d()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值