愚公移山日记·36
今天的是装饰器的高级用法,因为在多重装饰器的地方没少花时间,有点绕所以今天的跟新有点少。
在原装饰器上设置外部变量
'''
装饰器的写法
存在闭包
存在待修饰的函数
'''
def test(path):
print(path)
def funvtion_out(func):
'''外层函数 '''
def function_in():
print('----开始验证-----')
func()
# 返回内层函数的引用
return function_in
# 返回装饰器的引用
return funvtion_out
@test('login.py')
# @test('login.py') 分解为2步
# 先执行test('login.py')--->function_out 引用
# @ 第一步的结果 --->@function_out
# 下一步
# login = function_out(login)
def login():
print('开始登录')
@test('register.py')
def register():
print('开始注册')
login()
register()
# 格式:
# def test(path):
# function_out():
# function_in():
# ...
# return function_in
# return function_out
# 作用是向装饰器内部传递参数
# @test('login.py')
# test(login.py) --->function_out
# @ 第一步
多重装饰器
'''
创建一个装饰器,一个待装饰的函数
'''
# 定义一个让文字加粗的装饰器
def makeBlod(func):
def function_in():
return '<b>' + func() + '</b>'
return function_in
# 定义一个让文字倾斜的装饰器
def makeItalic(func):
def function_in():
return '<i>' + func() + '</i>'
return function_in
# <b>helloword-1</b>
@makeBlod
# test = makeBlod(test)
def test():
return 'helloword-1'
@makeItalic
def test2():
return 'helloword-2'
@makeBlod
@makeItalic
def test3():
return 'helloword-3'
print(test())
print(test2())
print(test3())
多重装饰器简单的理解就是对函数进行就近原则的装饰