関数呼び出しがグローバル変数を更新しない
この質問では、最初に False として割り当てられたグローバル変数が更新されないというプログラミングの課題について検討します。関数内で参照されると更新されません。関数がグローバル変数の値を変更しているにもかかわらず、メイン プログラムのループは実行を続け、無限ループにつながります。この問題を理解するには、名前空間と変数のスコープの概念を深く掘り下げる必要があります。
名前空間と変数のスコープ
プログラミングでは、すべての関数とモジュールが独自の名前空間を作成します。名前空間は、そのスコープ内で既知でアクセス可能な名前 (変数、関数など) のコレクションです。関数内で変数に値が割り当てられると、同じ名前のグローバル変数が存在する場合でも、関数の名前空間に新しい変数が作成されます。
グローバル変数の使用
この場合、「done」というグローバル変数が関数内で参照されると、同じ名前の新しいローカル変数が関数の名前空間に作成されます。このローカルな「完了」はグローバルな「完了」とは異なります。ローカルの「done」を変更しても、グローバル変数には影響しません。
Solution
これを解決するには、global キーワードを使用して、グローバル変数を明示的に参照する必要があります。機能。グローバル Done を使用すると、この関数は、新しいローカル変数を作成するのではなく、グローバル "done" 変数にアクセスするようにインタープリタに指示します。
修正コード
問題を解決するには、関数は次のように変更できます:
def function():
global done
for loop:
code
if not comply:
done = True
説明
グローバル Done を使用すると、関数内で使用される変数とグローバル変数の間の接続が確立されます。関数が Done の値を変更すると、最初に参照されたのと同じグローバル変数が更新されます。これにより、関数が Done を True に設定したときに、メイン プログラムの while ループが意図したとおりに終了することが保証されます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3