上下文本地 - 它们如何使本地上下文变量全局化?

时间:2010-10-26 09:54:53

标签: python

我正在阅读Flask文档 - 并遇到了this

  

...对于Web应用程序,它至关重要   对客户端发送给的数据做出反应   服务器。在Flask中,这个信息是   由全局请求对象提供。   如果你有一些经验   你可能想知道Python是怎么回事   对象可以是全局的以及Flask如何   设法仍然是线程安全的。该   答案是上下文本地人......

现在我理解上下文本地化就像with语句一样(当然这就是python 2.6 doc似乎建议的内容)。我很难看到这将如何允许您拥有驻留在本地命名空间中的全局可访问的变量?这在概念上如何运作?

另外:全局通常被认为是肮脏我接受它,为什么这样可以呢?

2 个答案:

答案 0 :(得分:4)

它们实际上是真实对象的代理对象,因此当您引用它时,您可以访问当前线程的对象。

一个例子是request对象。您可以在globlals.py中看到此设置,然后导入到__init__.py的烧瓶中。

这样做的好处是您可以通过执行

来访问请求
from flask import request

并编写类似

的方法
@app.route('/')
def hello_world():
    return "Hello World!"

无需将请求作为参数传递。

这是利用Werkzeug中的一些可重用代码库。

答案 1 :(得分:-1)

python中的

名称空间基本上是字典 你可以做到

globals()['foo']=bar