使用Python装饰器实现限制函数调用的频率

作者: 我有一只碗 | 来源:发表于2017-09-01 23:57 被阅读0次

装饰器算是Python非常有用的特性之一了,因为它实现了DRYC(不要重复你自己的代码),但是它非常难驾驭,十分不好理解。

def doc_it(f):
    def decorator(*args, **kwargs):
        print('This is doc')
        return f(*args, **kwargs)
    return decorator

这就是一个标准的装饰器了,它能在所装饰的函数调用前自动输出一行文本

@doc_it
def func():
    print('a')

上面的代码做的事情就是把func作为参数传入了装饰器doc_it,相当于func=doc_it(func),我们可以得到一个新函数,尽管我们还可以通过func调用它,但是输出一下func._name_发现会得到decorator,说明它确实已经变成了另外一个函数

用这个有用的特性我们可以实现一个函数内部缓存的效果,原理如下:

def count_it(f):
    count = [0]
    def decorator(*args, **kwargs):
        count[0] += 1
        print('count is {count}'.format(count[0]))
        return f(*args, **kwargs)
    return decorator

这个装饰器我们可以轻易统计出一个函数调用的次数,但是我们那个缓存为什么要使用list类型呢,用一个int类型岂不是更好,但是这里只能用可变类型的数据,具体原因参考默认参数。

然后我们用装饰器实现限制函数调用的频率就很简单了

from time import time

def time_required(f):
    last = [time()]
    def decorator(*args, **kwargs):
        if time() - last[0] < 10:
            raise RuntimeError('This time not allow, please wait to {time}'.format(time=last[0] + 10))
        last[0] = time()
        return f(*args, **kwargs)
    return decorator

相关文章

  • 使用Python装饰器实现限制函数调用的频率

    装饰器算是Python非常有用的特性之一了,因为它实现了DRYC(不要重复你自己的代码),但是它非常难驾驭,十分不...

  • Flask 视图和路由的进阶技能

    视图装饰器 Python 装饰器是用于转换其它函数的函数。当一个装饰的函数被调用的时候,装饰器也会被调用。接着装饰...

  • 理解 Python 装饰器与回调函数

    1.理解 Python 装饰器2.Python装饰器和回调函数回调函数就是一个通过函数指针调用的函数。如果你把函数...

  • 装饰器函数

    在Python有一类特殊的函数,叫装饰器函数。装饰器函数可以在函数的调用的时候,将装饰器的内容注入到函数之中。在定...

  • Python 装饰器

    装饰 打印结果: python中的装饰器是让一个指针 f1 指向函数地址,在调用函数之前,先去调用装饰器 w1,并...

  • 装饰器

    装饰器 为了动态拓展函数,而不去破坏原函数的调用,产生了装饰器。通常使用装饰器给函数加log。 单层装饰器 以上是...

  • Python装饰器4-函数参数是函数名

    Python的函数参数可以是可调用对象 对于函数名就是一个可调用对象 小结 Python装饰器的语法是将被装饰的函...

  • 函数装饰器(Function Decorators)

    函数装饰器(Function Decorators) python中函数装饰器的使用和Java中注解类似, 直接在...

  • python Decorator (装饰器)

    Python 装饰器Python 装饰器 Decorator 使用kotlin的时候发现有个函数很好玩 measu...

  • Python基础28-面向对象(系统内置方法8-装饰器)

    8 装饰器 1 装饰器(函数式实现) 2 通过类方式,实现装饰器 通常装饰器使用 使用@check 方式实际上就是...

网友评论

    本文标题:使用Python装饰器实现限制函数调用的频率

    本文链接:https://www.haomeiwen.com/subject/lnhljxtx.html