0

변수 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)는 1를 인쇄해야합니다. 실제로는 온라인 파이썬 놀이터에서 테스트 할 때 작동합니다 (예 : here).

하지만 숭고한 (ST3 빌드 3126)에서는 0을 인쇄합니다. 아주 이상한. 그것은 어떻게 고칠 수 있 었는가?

답변

1

당신의 문제는 이것이 숭고함에서 다르게 작용하지 않는다는 것입니다. 당신이 작성한 것은 이것에 기초한 예제 코드와 의미 상으로 다르다는 것입니다.

코드 예에서 globvar은 전역이 아닙니다. on_activated 메소드의 로컬 변수입니다.

당신이 updateme 기능에 global globvar을 말할 때, 당신은 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 
: 변수가 실제로 세계로 들어

, 당신은 모듈 파일의 최상위 레벨로, 방법의 외부로 이동해야