views.py中全局变量的作用域是什么?
What is the scope of global variables in the views.py?
如果我在 views.py
中声明一个全局变量 myglobalvar
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
只是为了验证这一点,然后使用 global
关键字使 x 成为全局变量。现在,x
在外部范围内重新初始化,函数 third
确认。
特别是对于您的场景,myglobalvar
只会针对该特定请求进行更改,外部范围值将保持不变。但是,如果您使用 global
关键字。
global myglobalvar
myglobalvar = "different value"
在 thatOneLink
中,myglobalvar
的值将针对该进程服务的所有请求(甚至是该进程中的所有线程)更改,直到您重新启动该进程。
如果我在 views.py
中声明一个全局变量myglobalvar
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
只是为了验证这一点,然后使用 global
关键字使 x 成为全局变量。现在,x
在外部范围内重新初始化,函数 third
确认。
特别是对于您的场景,myglobalvar
只会针对该特定请求进行更改,外部范围值将保持不变。但是,如果您使用 global
关键字。
global myglobalvar
myglobalvar = "different value"
在 thatOneLink
中,myglobalvar
的值将针对该进程服务的所有请求(甚至是该进程中的所有线程)更改,直到您重新启动该进程。