0
次の2つの例では、nonlocal
で宣言された変数が存在しないことが正しいですか?これら2つの例で `nonlocal`で宣言された変数は存在しませんか?
次に、最初の例でエラーが発生していますが、2番目の例でエラーが発生していないのはなぜですか?ありがとう。
例1:
count = 0
def make_counter():
def counter():
nonlocal count # SyntaxError: no binding for nonlocal 'count' found
count += 1
return count
return counter
例2:Pythonドキュメント当たり
a = 5
def f():
a=2
class C1:
a = 3
def f1(self):
nonlocal a # refers to `a` local to `f`
a = 4
def f2(self):
self.f1()
print(self.a)
print(a)
f() # 2
print(a) # 5
例1は、 'count'が直前のスコープにないため失敗しません。すべての非グローバル*スコープで見つからないため失敗します。 "nonlocal'ステートメントは、リストされた識別子が、globals *を除いて、最も近い囲みスコープで以前にバインドされた変数を参照するようにします。 (emphasis mine) – chepner
は#1で 'count'が** global **スコープ内にあるために投げます。スコープが離れているわけではなく、' nonlocal'はクロージャーインクロージャー(。等) –
説明をありがとう!与えられた例は私がそれを1つ前のスコープであるものにしました。 – AetherUnbound