python 装饰器

2020-12-03  本文已影响0人  Lupino

在使用 web 框架的时候,我们每个路由上都有个 @xxx 的函数。

这个函数就是装饰器。

那么装饰器有啥作用呢?

装饰器可以对函数进行一些预处理, 比如做一些缓存,做路由啊,做权限啊,等等都可以。

没有装饰器的时候我们代码是怎么写的?

def some_route(arg1):
    u = get_user(arg1)
    check_perm(u)
    return 'some thing'

def some_route1(arg1):
    u = get_user(arg1)
    check_perm(u)
    return 'some thing'

有了装饰器代码变简洁了

def check_perm(func):
    def _check_perm(arg1):
        u = get_user(arg1)
        my_check_perm(u)
        return func(arg1)
    return _check_perm

@check_perm
def some_route(arg1):
    return 'some thing'

@check_perm
def some_route1(arg1):
    return 'some thing'

修饰器是怎么执行的呢?

我们换种写法

def check_perm(func):
    def _check_perm(arg1):
        u = get_user(arg1)
        my_check_perm(u)
        return func(arg1)
    return _check_perm

def _some_route(arg1):
    return 'some thing'

some_route = check_perm(_some_route)

def _some_route1(arg1):
    return 'some thing'

some_route = check_perm(_some_route1)

这个就是修饰器的基本原理。

写到这里,今天修饰器的介绍也基本完成了。

大家,发挥自己的想象力,使用愉快

上一篇下一篇

猜你喜欢

热点阅读