装饰器_上

def foo():
    print("foo")
print(foo)
# 输出foo的地址
foo()#对foo函数的调用

def foo():
    print("foo2")

foo = lambda x : x+1
# 使用foo对象接收函数
print(foo(2))

def w(func):
    def inner():
        # 验证、使用内部函数的inner函数进行验证
        print("对函数进行验证中~~~")
        func()#内部函数使用了外部函数的func函数
    return inner#闭包函数、返回内部函数名

@w #对w的装饰
def fun1():
    print("fun1验证完毕,开始接下来的工作")

@w
def fun2():
    print("fun2验证完毕,开始接下来的工作")

fun1()#运行、先运行装饰器,后运行函数
fun2()

def makeBold(fn):
    # fn形参实际上是使用了makeBold装饰器的函数
    def wrapped():
        return "<b>"+fn()+"</b>"
    return wrapped
def makeitalic(fn):
    def wrapped():
        return "<i>"+fn()+"</i>"
    return wrapped
@makeBold
def test1():
    return "hello world -1 "
@makeitalic
def test2():
    return "hello world -2 "
@makeBold#后使用makeBold
@makeitalic#先使用装饰器makeitalic
def test3():
    return "hello world -3 " #@makeitalic先执行然后是@makeBold 先执行最近的
print(test1())
print(test2())
print(test3())

2020-05-08

原文地址:https://www.cnblogs.com/hany-postq473111315/p/12846997.html