python 装饰器

装饰器

装饰器的底层实际就是闭包

**在一个外函数中定义了一个内函数,    #函数的嵌套**、
**内函数里运用了外函数的临时变量,    #嵌套作用域变量**
**并且外函数的返回值是内函数的引用。   #返回函数**
**这样就构成了一个闭包。**`

装饰器是在函数调用之上的修饰 他的作用是在不改变原有项目代码的基础上增加一些额外的功能

装饰器能有助于检查某个人是否被授权去使用一个web应用的端点(endpoint)。它们被大量使用于Flask和Django web框架中。

日志是装饰器运用的另一个亮点

装饰器格式

def outer(func):
    def inner():            #自上而下的执行
        print('特殊校验功能')
        func()      #现在代表ff
        print('789')

    return inner

@outer
def ff():
    print('hello python')
ff()

有形参的装饰器

def outer(func):
        # @里有形参 这里必须跟
    def inner(a,b):            #自上而下的执行
        print('装饰器函数开始执行')
        print('特殊校验功能开始执行')
        # 这里也得跟形参
        func(a,b)      #现在代表ff
        print('装饰器函数结束执行')

    return inner

@outer
def ff(a,b):        #有形参
    print('a+b=',(a+b))
ff(50,60)

有形参的装饰器 用不定长参数

def outer(func):
        # @里有形参 这里必须跟
    def inner(*args,**kwargs):            #自上而下的执行
        print('装饰器函数开始执行')
        print('特殊校验功能开始执行')
        # 这里也得跟形参
        func(*args,**kwargs)      #现在代表ff
        print('装饰器函数结束执行')

    return inner

@outer
def ff(a,b,d):        #有形参
    print('a+b+d=',(a+b+d))
ff(50,60,89)

多层装饰器

多层嵌套装饰器开始的时候,
装饰器自上而下开始,
然后执行函数操作,
结束时,装饰器自下而上结束

def outer1(func):


    # @里有形参 这里必须跟
    def inner(*args, **kwargs):  # 自上而下的执行
        print('装饰器函数1开始执行')
        print('特殊校验功能1开始执行')
        # 这里也得跟形参
        func(*args, **kwargs)  # 现在代表ff
        print('装饰器函数1结束执行')


    return inner
def outer2(func):

    # @里有形参 这里必须跟
    def inner(*args, **kwargs):  # 自上而下的执行
        print('装饰器函数2开始执行')
        print('特殊校验功能2开始执行')
        # 这里也得跟形参
        func(*args, **kwargs)  # 现在代表ff
        print('装饰器函数2结束执行')


    return inner


@outer1
@outer2
def ff(a, b, d):  # 有形参
    print('a+b+d=', (a + b + d))


ff(50, 60, 89)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值