私はこのようなクラスのメソッド内に関数を持っています:
class A():
def run(self):
exit=False
def walk():
global exit
#DoStuff - change exit variable
walk()
print(exit)
これで、関数walk
はexit
変数を変更する必要があります。しかし、この変数は常にFalse
以前に設定されたように関数の外にあります。この関数がこの変数をに設定した場合、関数の外部でこれにアクセスするためのフラグとして使用してこの変数を変更するにはどうすればよいTrue
ですか?私はこの変数の範囲についてかなり混乱しています。私はPython3.6を使用しています。
現在の設定
class A:
def run(self):
exit = False
def walk():
global exit
exit = True
walk()
print(exit)
a = A()
a.run() # False
print(exit) # True
版画False
のでexit
、あなたが内部の印刷run
の範囲で生活をrun
、それがグローバル変数ではありません。あなたは実際にグローバル変数exit
を設定していますwalk
-をprint
与えるための2番目の呼び出しを参照してくださいTrue
。
代わりに必要なのglobal
は、nonlocal
自由変数を変更できるキーワードです。global
ただし、最初に何が起こるかを調べてみましょう。
class A:
def run(self):
exit = False
def walk():
exit = True
walk()
print(exit)
a = A()
a.run() # False
で割り当てられたローカル変数の作成を気にしないFalse
ため、コードは出力run
されwalk
ます。nonlocal
しかしの追加で
class A:
def run(self):
exit = False
def walk():
nonlocal exit
exit = True
walk()
print(exit)
a = A()
a.run() # True
を囲む非ローカルスコープに変数を設定しているTrue
ため、コードはを出力exit = True
します。exit
run
追加のコンテキストについて調査する必要がある重要なトピックは、クロージャと自由変数です。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加