第一步
#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