django - views.py 中全局变量的作用域是什么?
问题描述
myglobalvar
如果我在 views.py 中声明一个全局变量
myglobalvar = "value"
def home(request):
print(myglobalvar)
def thatOneLink(request):
myglobalvar = "different value"
当有人打电话thatOneLink
时,变化的范围是什么?会不会myglobalvar = "different value"
只针对这个要求?还是只针对会话?或者直到服务器重新启动?
默认情况下,在 JSP 中,范围有设置。Django 似乎有另一个包:https ://pypi.org/project/django-scopes/ 但是在没有任何附加包的默认情况下,Django 如何处理范围?还是它们有不同的名称或定义?
解决方案
Python 作为一种语言具有作用域和全局变量的概念。无论 Django 是什么,这同样适用于此。看这个例子
x = 10
def first():
x = 20
print(x)
def second():
global x
print(x)
x = 30
print(x)
def third():
print(x)
first()
second()
third()
输出
20
10
30
30
在first
函数中 x 被重新声明为一个新值,并且对外部值没有影响。该函数second
打印x
just 以验证这一点,然后使用global
关键字将 x 设为全局。现在,x
在外部范围内重新初始化,并且函数third
确认了这一点。
特别是对于您的场景,myglobalvar
只会针对该特定请求进行更改,并且外部范围值将保持不变。但是,如果您使用global
关键字。
global myglobalvar
myglobalvar = "different value"
在内部,该进程服务的所有请求(甚至该进程中的所有线程)thatOneLink
的值都将发生变化,直到您重新启动该进程。myglobalvar
推荐阅读
- geolocation - 从最近到最远订购 Firestore GeoHash 查询?
- favicon - 如何将 favicon 添加到 Next.js 静态站点?
- javascript - iOS Safari 视频/相机无法在移动设备上运行 - Javascript 和 Html
- ios - 如何使变量可以从不同的 swift 文件中访问?
- angular - ng new 错误:EPERM: operation not allowed syscall unlink
- jquery - 数据更改时如何在制表器中突出显示单个单元格
- javascript - 修复 on_click 函数以更改文本
- php - Laravel Consolestvs\charts - 在图表中显示属于登录的特定用户的数据
- javascript - 循环遍历包含对象的数组对象
- c# - Gradle 启动失败:意外令牌:...@ 第 83 行,第 7 列