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を印刷しなければなりません。そして、実際には、私がオンラインのPythonプレイグラウンドでテストするときに動作します。たとえば、hereです。

しかし何らかの理由で、サブライム(ST3ビルド3126)では0が表示されます。非常に奇妙な。どのように修正することができますか?

答えて

1

あなたの問題は、これがSublimeでは異なった働きをするのではなく、あなたが書いたことはこれに基づいたサンプルコードとは意味が異なるということです。

コード例では、globvarはグローバルではありません。それはon_activatedメソッドのローカル変数です。

あなたはupdateme機能でglobal globvarを言うとき、あなたはglobvarへのアクセスのpythonを言っていることは、それが実際にグローバルを作成する原因となるグローバル変数ではなく、それが現在ローカルスコープから見ることができます1、にする必要があります代わりにその名前を使用してください。

つまり、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 
:変数は、実際にグローバルであるためには

、あなたはモジュールファイルのトップレベルに、メソッドの外に移動する必要があります

関連する問題