6

web.applicationweb.pyチュートリアルが次のように渡す文書化されていないfvars引数を受け入れます。globals()

import web

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

urls = (
  '/', 'index'
)

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

合格するアプリケーションを少なくとも1つ見ましたlocals()。この変数は何に使用され、なぜそれを渡したいのですlocals()globals()

4

1 に答える 1

4

これは、ハンドラークラスを文字列からクラスオブジェクト自体に変換するためにapplication.handle()(次に呼び出す)によって使用されます。ソースコードはこちら。application._delegate()

たとえば、上記のコードスニペットにurls = ('/', 'index')は、URLからクラス文字列へのマッピングがあります。したがって、文字列を検索してクラス自体を取得できるようにするには、dictがweb.application必要です。globals()'index'

実際、これはやや非Pythonのデザインだと思います。クラスを直接渡してみませんか?web.pyもそのアプローチをサポートしていると思います。ただし、クラスは文字列として実行されたため、自動再読み込みの方が簡単だと思います。自動リロードコードはfvars頻繁に使用します。

Re locals():モジュールレベルでlocals()は、実際には意味がありませんが、と同じ辞書を返しますglobals()。これが、それが機能する理由です。

于 2013-02-26T22:06:14.117 に答える