内部で別の関数を再帰的に実行する関数があり、その関数のすべての実行で変数を共有したいと思います。
そんな感じ:
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
機能?それとも、まったく異なるアプローチを使用する必要がありますか?
このnonlocal
ステートメントを使用して、にアクセスしますx
。これは、グローバルではなく、ローカルtestglobal
です。
def testglobal():
x = 0
def incx():
nonlocal x
x += 2
incx()
return x
assert 2 == testglobal()
Python 2でこれを行うのに最も近いのx
は、質問で述べた引数ハックと同様に、可変値に置き換えることです。
def testglobal():
x = [0]
def incx():
x[0] += 2
incx()
return x[0]
assert 2 == testglobal()
これは、リストの代わりに関数属性を使用する例です。これは、より魅力的な代替手段です。
def testglobal():
def incx():
incx.x += 2
incx.x = 0
incx()
return inc.x
assert 2 == testglobal()
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加