我想在Python中编写一个简单(轻量级)的RESTful服务器。我曾经碰到过下面的代码从Google:有人可以解释这个Python代码吗? (可能使用装饰器)
import web
import json
from mimerender import mimerender
render_xml = lambda message: '<message>%s</message>'%message
render_json = lambda **args: json.dumps(args)
render_html = lambda message: '<html><body>%s</body></html>'%message
render_txt = lambda message: message
urls = (
'/(.*)', 'greet'
)
app = web.application(urls, globals())
class greet:
@mimerender(
default = 'html',
html = render_html,
xml = render_xml,
json = render_json,
txt = render_txt
)
def GET(self, name):
if not name:
name = 'world'
return {'message': 'Hello, ' + name + '!'}
if __name__ == "__main__":
app.run()
我不熟悉就行了@mimerender
使用的语法。这似乎是一个构造函数和函数装饰的AA怪异组合 - 但是,我所遇到的最新装饰的各种用途通常是这样写的:
def foo():
pass
def foobar():
pass
@foo
@pass
def some_other_func():
pass
是什么代码意味着/做的@mimerender
节?
对。整个故事可以在这里找到:http://stackoverflow.com/questions/739654/understanding-python-decorators – 2012-01-11 11:12:49
@filmor:你不是指GET = mimerender(GET)? - (用你的foo例子) – 2012-01-11 11:26:24
不,我不知道。这就是它的重点。正如其他人回答的,mimerender是一个函数,它返回一个装饰器。所以表达式'mimerender(...)'(其中'...'是上面给出的参数)*是装饰器,这意味着它不过是一个函数,它接受另一个函数并且(最好)返回一个函数。所以,如果你熟悉数学符号,它就像'mimerender:params - >(func - > func)'。 – filmor 2012-01-11 11:34:55