# 装饰器,对一个函数打扮
# def foo():
# print("foo")
# foo
# foo()
# def test1():
# print('-----1-----')
# def test1():
# print('-----2-----')
# test1()
# 需求来了
# 开放封闭规则
# 封闭:以实现的功能代码块
# 开放:对扩展开放
# 语法糖
# def w1(func):
# def inner():
# # 验证1
# # 验证2
# # 验证3
# func()
# return inner
# @w1
# def f1():
# print('1111111')
# @w1
# def f2():
# print('2222222')
# @w1
# def f3():
# print('3333333')
def w1(func):
def inner():
print("----正在验证权限-----")
func()
return inner
def f1():
print('------f1--------')
def f2():
print('------f2--------')
# innerFunc = w1(f1)
# innerFunc()
# innerFunc = w1(f2)
# innerFunc()
f1 = w1(f1)
f1()
# 2----------
# def w1(func):
# def inner():
# print("----正在验证权限-----")
# if False:
# func()
# else:
# print("没有权限")
# return inner
# @w1 # f1 = w1(f1)
# def f1():
# print('------f1--------')
# @w1
# def f2():
# print('------f2--------')
# f1()
# print('---------------------')
# f2()
# 再议装饰器
# def makeBold(fn):
# def wrapped():
# print('---------1-------------')
# return "<b>"+ fn() +"</b>"
# return wrapped
# def makeTtalic(fn):
# def wrapped():
# print('---------2-------------')
# return "<i>"+ fn() +"</i>"
# return wrapped
# # 装饰器从下往上装,调用从上往下调用
# @makeBold
# @makeTtalic
# def test3():
# print('---------3-------------')
# return 'hello world-3'
# ret = test3()
# # ---------1-------------
# # ---------2-------------
# # ---------3-------------
# print(ret)
# # ---------1-------------
# # ---------2-------------
# # ---------3-------------
# # <b><i>hello world-3</i></b>
# 装饰器什么时候进行装饰
def w1(func):
print("--正在装饰1-----")
def inner():
print("----正在验证权限1-----")
func()
return inner
def w2(func):
print("--正在装饰2-----")
def inner():
print("----正在验证权限2-----")
func()
return inner
# 只要python解释器执行到了这个代码,那么就会自动的进行装饰,而不是等调用的时才装时的
@w1
@w2
def f1():
print('------f1--------')
# --正在装饰-----
# 再调用之前已经装饰好了
f1()
# --正在装饰2-----
# --正在装饰1-----
# ----正在验证权限1-----
# ----正在验证权限2-----
# ------f1--------