def deco(func):
print "deco"
return func
@deco
def foo():
return "hello"
#main
if __name__=="__main__":
print foo()
装饰器理解起来就是
def deco(func):
print "deco"
return func
def foo():
return "hello"
#main
if __name__=="__main__":
fun = deco(foo)
print fun()
但是装饰器有个重要的特性就是在装饰的时候会调用一次
def deco(func):
print "deco"
return func
@deco
def foo():
return "hello"
#main
if __name__=="__main__":
pass
理解带参数的装饰器
def deco(**kw):
print kw
def _deco(func):
return func
return _deco
@deco(key="123")
def foo():
return "hello"
#main
if __name__=="__main__":
print foo()
理解起来就是
def deco(**kw):
print kw
def _deco(func):
return func
return _deco
def foo():
return "hello"
#main
if __name__=="__main__":
#print deco(key='123')(foo)()
fun = deco(key='123')(foo)
print fun()
利用装饰器在装饰时会调用一次,我们可以利用它在程序真正开始执行之前注册函数,以便方便的在需要的时候调用,实现逻辑解耦,举个栗子!
mapper={}
def deco(**kw):
key = kw['key']
def _deco(func):
#如没有注册到mapper中就把该函数注册进mapper
if key not in mapper:
mapper[key] = func
return func
return _deco
@deco(key='get')
def foo1():
return "call get"
@deco(key='post')
def foo2():
return "call post"
#main
if __name__=="__main__":
key = 'get'
#查找key=get的函数
call = mapper[key]
#调用这个函数
print call()
这样就形成了一个类似框架的东西,仔细观察的话,很像springMVC或者bottle,下一章节,我们就来用装饰器来封装一下python的web处理,服务器采用tornado,打算实现的最终目标如下:
@Router.route(url=r"hello/([a-z]+)",method=Router._GET|Router._POST)
def test(self,req,who):
#http://localhost:8888/hello/billy
return "Hi,"+who
@Router.route(url=r"greetings/([a-z]+)",method=Router._GET)
def test2(self,req,who):
#http://localhost:8888/greetings/rowland
raise Exception("error")
@Router.route(url=r"book/([a-z]+)/(\d+)",method=Router._GET|Router._POST)
def test3(self,req,categories,bookid):
#http://localhost:8888/book/medicine/49875
return "You are looking for a "+categories+" book\n"+"book No. " + bookid
@Router.route(url=r"json",method=Router._POST)
def test4(self,req):
#http://localhost:8888/json
#print req.request.body
who=req.json_args.get("who","default")
age=req.json_args.get("age",0)
person={}
person['who']=who
person['age']=int(age)
return person
分享到:
相关推荐
python装饰器是一个用于封装函数、方法或类的代码的工具,用来显式指定管理它们的代码。一次编写,可用于多种不同的情况。在python 的流行框架中,装饰器应用越来越广泛。用类设计装饰器,可以利用实例属性保持装饰...
demo python使用装饰器(Decorator)的方式实现单例模式 functools.wraps 则可以将原函数对象的指定属性复制给包装函数对象, 默认有 __module__、__name__、__doc__,或者通过参数选择
python装饰器详解,python装饰器笔记心得
python方法 python_装饰器Decorators
本工程是使用demo构建装饰器,以及装饰器的使用案例。 从最简单的装饰器到带参数的,带任意参数的,到类装饰器等。代码案例比较全。可作为学习参考与交流。
!!!CSDN的一个特性: 即使我...关于Python装饰器课程的课件代码相关文件, 文字版讲义见: https://blog.csdn.net/ncepu_Chen/article/details/106075394 视频版本讲义见: https://www.bilibili.com/video/BV1SZ4y1s7cv/
Python装饰器-失败用例自动重试
python——retry装饰器(csdn)————程序
python装饰器的引入到最终的应用实例,对python装饰的精华部分进行解读,明确写出了理解语法的关键要点。
利用python的装饰器功能,编写的一个关于斗地主洗牌和抓牌的算法
装饰器这东西我看了一会儿才明白,在函数外面套了一层函数,感觉和java里的aop功能很像;写了2个装饰器日志的例子, 第一个是不带参数的装饰器用法示例,功能相当于给函数包了层异常处理,第二个是带参数的装饰器...
12.10_装饰器(三)|函数式编程__匿名函数、高阶函数、装饰器|Python3.8入门_&_进阶_&_原生爬虫实战完全解读
Python 如何使用装饰器判定用户操作权限 Python源码Python 如何使用装饰器判定用户操作权限 Python源码Python 如何使用装饰器判定用户操作权限 Python源码Python 如何使用装饰器判定用户操作权限 Python源码Python ...
Python之装饰器共6页.pdf.zip
今天小编就为大家分享一篇关于Python装饰器限制函数运行时间超时则退出执行,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
python类装饰器装饰方法通用编码模型分析
python中装饰器的理解,以及面向切面编程的解释。
“装饰”从字面意思来谁就是对特定的建筑物内按照一定的思路和风格进行美化的一种行为,所谓“器”就是工具,对于python来说装饰器就是能够在不修改原始的代码情况下给其添加新的功能,比如一款软件上线之后,我们...