重新分配全局变量

Re-assign global variable

如何将变量 globvar0 更新为 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