使用和实现装饰器

Posted miss_林

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用和实现装饰器相关的知识,希望对你有一定的参考价值。

使用装饰器格式为:@+装饰器名称;实现一个装饰器首先要理解闭包的思想,如下例子:实现了斐波那契数列

def fb(n):

    if n <= 1:
        return 1

    return fb(n-1) + fb(n-2)

以上实现方式每次都要计算元素,非常耗时和消耗内存,以下增加了一个缓存的字典,从缓存中读取大大提高了运算的速度


def fb(n ,cahe = None):
    
    if cahe is None:
        cahe = {}

    if n in cahe:
        return cahe[n]

    if n <= 1:
        return 1

    cahe[n] = fb(n-1) + fb(n-2)
    return cahe[n]

 

如果实现多种不同的算法,为了节省运算时间,每个算法都要添加一个缓存,会出现很多的重复代码,所以使用闭包的思想实现一个装饰器,如下

‘‘‘装饰器使用了闭包的思想‘‘‘
def memo(fun):

    ache = {}

    def wrap(*args):

        if args not in ache:
            ache[args] = fun(*args)
        return ache[args]
    return wrap

@memo #@memo是 fb = memo(fb) 在python中提供的简单写法
def fb(n):

    if n <= 1:
        return 1

    return fb(n-1) + fb(n-2)

@memo
def climb(n, steps):

    count = 0
    if n == 0:
        count = 1

    elif n > 0:
        for step in steps:
            count += climb(n - step, steps)
    return count


print fb(60)

print climb(10, (1, 2, 3))

 

以上是关于使用和实现装饰器的主要内容,如果未能解决你的问题,请参考以下文章

类中的装饰器在Pycharm中抛出警告

python装饰器使用

编程模式之Go语言如何实现装饰器

如何在 TypeScript 中使用装饰器

python 装饰器和property

Python @retry装饰器的使用与实现案例