码迷,mamicode.com
首页 > 其他好文 > 详细

装饰器四部曲

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

标签:move   需要   ==   内存   地址   ...   int   ret   print   

第一步

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

装饰器四部曲

标签:move   需要   ==   内存   地址   ...   int   ret   print   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!