将“globals()”作为web.py fvars传递的目的是什么?

时间:2013-02-26 21:27:05

标签: web.py

web.application接受web.py tutorial通过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()

1 个答案:

答案 0 :(得分:4)

application.handle()(后者又调用application._delegate())将处理程序类从字符串转换为类对象本身。 Source code here.

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

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

重新locals():在模块级别,locals()实际上没有意义,但它会返回与globals()相同的字典,这就是为什么会有效。