首页 > 解决方案 > 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 如何处理范围?还是它们有不同的名称或定义?

标签: djangoscope

解决方案


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打印xjust 以验证这一点,然后使用global关键字将 x 设为全局。现在,x在外部范围内重新初始化,并且函数third确认了这一点。

特别是对于您的场景,myglobalvar只会针对该特定请求进行更改,并且外部范围值将保持不变。但是,如果您使用global关键字。

global myglobalvar
myglobalvar = "different value"

在内部,该进程服务的所有请求(甚至该进程中的所有线程)thatOneLink的值都将发生变化,直到您重新启动该进程。myglobalvar


推荐阅读