首页 > 其他 > 详细

装饰器四部曲

时间:2017-03-19 23:50:03      阅读:193      评论:0      收藏:0      [点我收藏+]

第一步

#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‘)

装饰器四部曲

原文:http://www.cnblogs.com/bainianminguo/p/6582817.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!