重新分配全局变量
Re-assign global variable
如何将变量 globvar
从 0
更新为 1
?
import sublime_plugin
class TestMe(sublime_plugin.EventListener):
def on_activated(self, view):
globvar = 0 # The goal is to update this var from 0 to 1
def updateme():
global globvar
globvar = 1
def printme():
print(globvar)
updateme()
printme() # It *should* print 1
此代码段 (all credits to Paul Stephenson) should print 1
. And actually it works when I test it in online Python playgrounds, for example here.
但出于某种原因,在 Sublime(ST3 build 3126)中它打印 0
。很奇怪。如何解决?
您的问题不是这在 Sublime 中的工作方式不同,而是您编写的内容在语义上与您基于此的示例代码不同。
在您的代码示例中,globvar
不是全局的;它是 on_activated
方法的局部变量。
当你在 updateme
函数中说 global globvar
时,你是在告诉 python 访问 globvar
应该是一个全局变量,而不是那个它目前可以从本地范围看到,这导致它实际创建一个具有该名称的全局变量并使用它。
对你来说,这意味着 updateme
函数正在创建一个全局变量并将其值设置为 1,但是 printme
函数正在打印该变量的本地版本,该版本仍在0,这就是你所看到的。
要使变量真正成为全局变量,您需要将其移出方法,移至模块文件的顶层:
import sublime_plugin
# Out here the variable is actually "global"
globvar = 0
class TestMe(sublime_plugin.EventListener):
def on_activated(self, view):
def updateme():
global globvar
globvar = 1
def printme():
print(globvar)
updateme()
printme() # Now prints one
如何将变量 globvar
从 0
更新为 1
?
import sublime_plugin
class TestMe(sublime_plugin.EventListener):
def on_activated(self, view):
globvar = 0 # The goal is to update this var from 0 to 1
def updateme():
global globvar
globvar = 1
def printme():
print(globvar)
updateme()
printme() # It *should* print 1
此代码段 (all credits to Paul Stephenson) should print 1
. And actually it works when I test it in online Python playgrounds, for example here.
但出于某种原因,在 Sublime(ST3 build 3126)中它打印 0
。很奇怪。如何解决?
您的问题不是这在 Sublime 中的工作方式不同,而是您编写的内容在语义上与您基于此的示例代码不同。
在您的代码示例中,globvar
不是全局的;它是 on_activated
方法的局部变量。
当你在 updateme
函数中说 global globvar
时,你是在告诉 python 访问 globvar
应该是一个全局变量,而不是那个它目前可以从本地范围看到,这导致它实际创建一个具有该名称的全局变量并使用它。
对你来说,这意味着 updateme
函数正在创建一个全局变量并将其值设置为 1,但是 printme
函数正在打印该变量的本地版本,该版本仍在0,这就是你所看到的。
要使变量真正成为全局变量,您需要将其移出方法,移至模块文件的顶层:
import sublime_plugin
# Out here the variable is actually "global"
globvar = 0
class TestMe(sublime_plugin.EventListener):
def on_activated(self, view):
def updateme():
global globvar
globvar = 1
def printme():
print(globvar)
updateme()
printme() # Now prints one