Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何理解烧瓶的代码?_Python_Flask_Werkzeug - Fatal编程技术网

Python 如何理解烧瓶的代码?

Python 如何理解烧瓶的代码?,python,flask,werkzeug,Python,Flask,Werkzeug,有人能解释一下这句话吗 g = LocalProxy(lambda: _request_ctx_stack.top.g) 烧瓶上的代码 from werkzeug import LocalStack, LocalProxy # context locals _request_ctx_stack = LocalStack() current_app = LocalProxy(lambda: _request_ctx_stack.top.app) request = LocalProxy(la

有人能解释一下这句话吗

g = LocalProxy(lambda: _request_ctx_stack.top.g) 
烧瓶上的代码

from werkzeug import LocalStack, LocalProxy

# context locals
_request_ctx_stack = LocalStack()
current_app = LocalProxy(lambda: _request_ctx_stack.top.app)
request = LocalProxy(lambda: _request_ctx_stack.top.request)
session = LocalProxy(lambda: _request_ctx_stack.top.session)
g = LocalProxy(lambda: _request_ctx_stack.top.g) 
Local的代码在这里:

对于LocalStack和LocalProxy可能会有所帮助,并且对其有一些基本的了解

似乎正在发生的事情是,创建了一个全局(但为空)堆栈
\u request\u ctx\u stack
。这对所有线程都可用。一些WSGI样式的对象(
当前应用程序
请求
会话
g
)被设置为使用全局堆栈中的顶部项


在某个时刻,一个或多个WSGI应用程序被推到全局堆栈上。然后,例如,当运行时使用当前应用程序时,将使用当前顶级应用程序。如果堆栈从未初始化,那么top将返回None,您将得到一个异常,如
AttributeError:“NoneType”对象没有属性“app”

几乎正确,但不完全正确。_request_ctx_堆栈是一个请求上下文堆栈,其中包含当前应用程序、请求、会话和请求全局。这些上下文按每个请求推送到堆栈上,否则这将无法工作。使用Lambda是因为LocalProxy()接受函数参数。