首页 > 编程语言 > 详细

Python 装饰器

时间:2016-05-06 07:02:46      阅读:223      评论:0      收藏:0      [点我收藏+]
需求:有两个函数,home()以及tv()给不同的业务部门调用,但是由于之前设计的缺陷,现在需要在登录之前做登录的验证,但是要求不能对原有的函数进行修改,而只能进行扩展。实现步骤如下:
注意:tv返回为函数地址,tv()为函数返回值,没有定义return的话返回值为None

def login(func):
print ("welcome to login")
return func

def home(name):
print ("welcome %s to home page"%name)

def tv(name):
print ("welcome [%s] to tv page" %name)


tv = login(tv)
tv("Alex")

结果:

welcome to login
welcome [Alex] to tv page

结论:1.先定义一个login函数,形参为函数的地址,返回值也为函数地址。

 

=======================================================

def login(func):
def inner(arg):
print ("welcome to login")
func(arg)
return inner

def home(name):
print ("welcome %s to home page"%name)

@login
def tv(name):
print ("welcome [%s] to tv page" %name)

#tv = login(tv)
# print(type(tv))
tv("Alex")
结果:

welcome to login
welcome [Alex] to tv page

结论:这里的@login等同于tv = login(tv)。执行@login,返回inner的地址(tv = inner的地址),执行tv(‘Alex‘)相当于开始执行inner(‘Alex‘)函数,同时执行func(‘Alex‘),此时的func = tv的地址。

 

Python 装饰器

原文:http://www.cnblogs.com/python-study/p/5464010.html

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