UnboundLocalError (入れ子関数スコープ内)
Python では、入れ子関数から外部関数で定義された変数にアクセスすると、UnboundLocalError。次の例を考えてみましょう。
<code class="python">def outer(): ctr = 0 def inner(): ctr += 1 inner()</code>
このコードを実行すると、内部関数の変数 ctr に対して UnboundLocalError が発生します。このエラーは、Python が ctr を、外部関数で定義されているにもかかわらず、内部関数内のローカル変数として扱うために発生します。この問題を解決するには、内部関数が外部関数のスコープにアクセスできるメカニズムを使用する必要があります。
解決策:
Python 3 では、 が導入されました。 nonlocal ステートメント。非ローカル変数の変更を許可します。 nonlocal を内部関数に追加することで、ctr を非ローカル変数として明示的に宣言し、内部関数内での再バインドを可能にします。
<code class="python">def outer(): ctr = 0 def inner(): nonlocal ctr ctr += 1 inner()</code>
あるいは、Python 2 では、nonlocal ステートメントでは、ベアネームの再バインドを避けるためにリストまたは他のデータ構造内でカウンター変数を囲むことでこの問題を回避できます。
<code class="python">ctr = [0] def inner(): ctr[0] += 1</code>
UnboundLocalError の発生を防ぎます。
以上がPython の入れ子関数スコープの UnboundLocalError を解決する方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。