为什么Python使用全局变量而不是方法参数? [重复]

问题描述 投票:1回答:2

我来自Java世界,对Python中的可变作用域非常困惑:

from flask import Flask, request

@app.route('/', methods=['POST'])
def handle():
    form = request.form

在与我一起工作的HTTP服务器中,习惯于将request之类的变量作为方法参数传递或从ThreadLocal中检索。为什么在这种情况下Flask / Python使用全局变量?它是线程安全的吗?

python flask
2个回答
2
投票

Flask使用了一些技巧,因此每个线程看到一个不同的请求对象。他们将其称为“上下文”,其作用类似于线程局部变量。

请参见ThreadLocal

上下文对于每个线程(或其他工作程序类型)都是唯一的。请求无法传递给另一个线程,另一个线程将具有不同的上下文堆栈,并且将不知道父线程指向的请求。

[这是Flask做出的使事情变得简单的设计决定。其他框架可以使用其他方式,例如将documentation对象显式传递给该函数。


-1
投票

首先在本地范围内搜索变量,如果找不到,则开始在全局范围内搜索。

请求未在处理方法中定义,这就是为什么使用全局方法的原因

© www.soinside.com 2019 - 2024. All rights reserved.