我想在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