首页 > 代码库 > 装饰器四部曲
装饰器四部曲
第一步
#func()是执行函数的意思,而func是该函数的内存地址的意思
#这里还要解释下,该函数的参数是func,函数有2个语句,一个是print语句,一个是return,该return
#的返回值就是func的内存地址
def login_check(func):
print(‘passed user verification.....‘)
return func
def tv():
print(‘Welcome [%s] to TV page‘)
#这里需要解释一下,把vt这个函数的内存地址作为参数传递给login_check,而login_check有个参数func,所以这个
#func这个参数就是tv这个函数,在login_check这个函数的返回值就是tv这个函数的内存地址,下面在使用tv();来
#调用tv这个函数
tv = login_check(tv)
tv()
第二部
def login(func):
print(‘passed user verification....‘)
return func
@login #@login == tv = login(tv)
def tv(name):
print(‘welcome [%s] to tv page。。。‘ %(name))
@login #@login == move = login(move)
def move(name):
print(‘welcome [%s] to move page...‘ %(name))
#这段代码有个问题就是,用@login的方式,就算在代码的下面没有调用
#tv和move两个函数,因为@login的原因,每次使用@login,都谁执行一
# 遍login函数,这样看起来是不是很low,下面可以看下结果
# passed user verification....
# passed user verification....
#这里就可以看到我使用了两次@login,login这个函数也被执行了两次
第三部
def login(func):
def inner(arg):
print(‘passed user verification....‘)
func(arg)
return inner
def tv(name):
print(‘welcome [%s] to tv page。。。‘ %(name))
def move(name):
print(‘welcome [%s] to move page...‘ %(name))
tv = login(tv)
tv(‘Bob‘)
第四部
def login(func):
def inner(arg):
print(‘passed user verification....‘)
func(arg)
return inner
@login
def tv(name):
print(‘welcome [%s] to tv page。。。‘ %(name))
@login
def move(name):
print(‘welcome [%s] to move page...‘ %(name))
tv(‘Bob‘)
move(‘Bob‘)
装饰器四部曲
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。