6

web.application接受web.py 教程传递fvars给的未记录参数,如下所示:globals()

import web

class index:
    def GET(self):
        return "Hello, world!"

urls = (
  '/', 'index'
)

if __name__ == "__main__": 
    app = web.application(urls, globals())

我见过至少一个通过的应用程序locals()。这个变量是做什么用的,为什么要传递它locals()globals()

4

1 回答 1

4

它被application.handle()(反过来调用application._delegate())用来将处理程序类从字符串转换为类对象本身。源代码在这里。

例如,在您上面的代码片段中,urls = ('/', 'index')是 URL 到类字符串的映射。所以web.application需要你的globals()dict 能够查找字符串'index'并获取类本身。

我实际上认为这是一个有点非 Pythonic 的设计。为什么不直接通过类呢?我认为 web.py 也支持这种方法。但是,我相信这些类是作为字符串完成的,因此自动重载更简单。自动重载代码fvars大量使用。

Re locals(): 在模块级别,locals()并没有真正的意义,但它返回与 相同的字典globals(),这就是为什么它会起作用。

于 2013-02-26T22:06:14.117 回答