私は内部で別の関数を再帰的に実行する関数を持っており、その関数のすべての実行に対して変数を共有します。そのようなPythonは関数内の関数のグローバル変数を共有します
何か:
def testglobal():
x = 0
def incx():
global x
x += 2
incx()
return x
testglobal() # should return 2
しかし、私は取得していますエラーNameError: name 'x' is not defined
リストを作成し、x
としてそのリストの最初の値を使用するためのハックソリューションがあります。しかし、これはとても醜いです。
x
をincx
と共有するにはどうすればよいですか?あるいは、私はまったく別のアプローチを使うべきですか?
のpython 3では新しいキーワード、[非ローカル](https://docs.python.org/3/がありますreference/simple_stmts.html#the-nonlocal-statement)、これはあなたが望むものとまったく同じです。これはクロージャであるため、変更なしで 'x'にアクセスできますが、' incx'の中に 'x = 1'を代入すると' xx'が 'incx'にローカルになり、したがって同じものを参照しません変数。 「非ローカル」はこれを達成する。 – alexpeits