trick(十五)、修饰符@的使用方法解析

参考 python函数修饰符@的使用方法解析 - 云+社区 - 腾讯云

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

import time


def timeslong(func):

    start = time.clock()

    print("It's time starting ! ")

    func()

    print("It's time ending ! ")

    end = time.clock()

    return "It's used : %s ." % (end - start)

上面的程序中,定义了一个函数,对另外一个对象的运行时间进行计算,如果采用通常的方式需要将 func() 重新在 timeslong 中重新写一遍。

(1)、修饰函数

为了简化这种操作,便提出了修饰符的概念。如下:

import time

def timeslong(func):

    def call():

        start = time.clock()

        print("It's time starting ! ")

        func()

        print("It's time ending ! ")

        end = time.clock()

        return "It's used : %s ." % (end - start)

    return call


@timeslong

def f():

    y = 0

    for i in range(10):

        y = y + i + 1

        print(y)

    return y

print(f())


Output:
---------------------------------------
It's time starting ! 
1
3
6
10
15
21
28
36
45
55
It's time ending ! 
It's used : 3.996044816994668e-05 .
--------------------------------------

这样出现便不用再函数内部再进行嵌入函数,通过 @timeslong对其进行修饰达到目的,是整个代码美观,而且少些部分代码。

(2)、修饰类

修饰符也可以通过类来进行使用,共享该类,如下为一个实例:

import time

class timeslong(object):

   def __init__(self,func):

      self.f = func

   def __call__(self):

      start = time.clock()

      print("It's time starting ! ")

      self.f()

      print("It's time ending ! ")

      end = time.clock()

      return "It's used : %s ." % (end - start)


@timeslong

def f():

    y = 0

    for i in range(10):

        y = y + i + 1

        print(y)

    return y


print(f())


Output:
------------------------------------
It's time starting ! 
1
3
6
10
15
21
28
36
45
55
It's time ending ! 
It's used : 4.266453864761224e-05 .
------------------------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wanderer001

ROIAlign原理

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值