入れ子関数スコープでの非ローカル変数へのアクセス
Python では、入れ子関数スコープにより、外側のスコープへのアクセスが提供されます。ただし、入れ子になった関数内の囲みスコープ内の変数を変更しようとすると、UnboundLocalError が発生する可能性があります。
この問題に対処するには、次のようないくつかのオプションがあります。
1。 「nonlocal」キーワードの使用 (Python 3 ):
Python 3 以降では、nonlocal キーワードを使用すると、入れ子になった関数内で非ローカル変数を再バインドできます。
def outer():
ctr = 0
def inner():
nonlocal ctr
ctr = 1
inner()
2.リストによる間接アクセス (Python 2 および 3):
Python 2 と 3 の両方で、リストを使用して変数を保持し、ネストされた関数内で間接的に変数をインクリメントできます。
ctr = [0]
def inner():
ctr[0] = 1
3.グローバル変数の使用 (推奨されません):
グローバル変数を使用すると、外側のスコープから変数にアクセスできるようになりますが、潜在的な競合やコードの可読性の問題のため、一般的には推奨されません。
def outer():
global ctr
ctr = 0
def inner():
ctr = 1
適切なソリューションの選択は、特定の Python バージョンとコードの設計上の考慮事項によって異なります。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3