最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

81python装饰器

来源:博客园


【资料图】

业务多的话选择装饰器

  • 实现原理:基于@语法和函数闭包,将原函数封装在闭包里,然后将函数赋值为一个新的函数(内层函数),执行函数时再在内层函数中执行闭包中的原函数。
  • 实现效果:可以在不改变原函数内部代码 和 调用方式的前提下, 实现在函数执行和执行扩展功能。
  • 适用场景:多个函数系统统一在 执行前后自定义一些功能。

装饰器实列:

# 装饰器实例  手写def outer(origin):    def inner(*args, **kwargs):        # 执行前        res = origin(*args, **kwargs)        # 执行后    return inner@outerdef func():    passfunc()

下面一步一步指导:看完就很简单了

引出

def func():    print("我是func函数")    value = (11, 22, 33, 44)    return valuedef outer(origin):    def inner():        print("before")        res = origin()   # 调用原来的func函数        print("after")        return res    return innerfunc = outer(func)result = func()print(result)# output:before我是func函数after(11, 22, 33, 44)

加装饰器一

"""@函数名def xxx():    passpython内部会自动执行 函数名(xxx),执行完之后,再将结果赋值给 xxxxxx = 函数名(xxx)"""def outer(origin):    def inner():        print("before")        res = origin()   # 调用原来的func函数        print("after")        return res    return inner@outer   # func = outer(func)def func():    print("我是func函数")    value = (11, 22, 33, 44)    return valueresult = func()print(result)# output:before我是func函数after(11, 22, 33, 44)

加装饰器二

def outer(origin):    def inner():        print("before")        res = origin()   # 调用原来的func函数        print("after")        return res    return inner@outerdef func1():    print("我是func1函数")    value = (11, 22, 33, 44)    return value@outerdef func2():    print("我是func2函数")    value = (11, 22, 33, 44)    return value@outerdef func3():    print("我是func3函数")    value = (11, 22, 33, 44)    return valuefunc1()func2()func3()# output:before我是func1函数afterbefore我是func2函数afterbefore我是func3函数after

优化

def outer(origin):    def inner(*args, **kwargs):        print("before")        res = origin(*args, **kwargs)   # 调用原来的func函数        print("after")        return res    return inner@outerdef func1(a1):    print("我是func1函数")    value = (11, 22, 33, 44)    return value@outerdef func2(a1, a2):    print("我是func2函数")    value = (11, 22, 33, 44)    return value@outerdef func3(a1):    print("我是func3函数")    value = (11, 22, 33, 44)    return valuefunc1(1)func2(11, a2=22)func3(999)# output:before我是func1函数afterbefore我是func2函数afterbefore我是func3函数after

关键词: 内部代码