L'appel de fonction ne met pas à jour la variable globale
Cette question explore un défi de programmation où une variable globale, initialement affectée comme False, n'est pas t étant mis à jour lorsqu’il est référencé dans une fonction. Malgré la fonction modifiant la valeur de la variable globale, la boucle du programme principal continue de s'exécuter, conduisant à une boucle infinie. Comprendre ce problème nécessite d'approfondir le concept d'espaces de noms et de portée des variables.
Espace de noms et portée des variables
En programmation, chaque fonction et module crée son propre espace de noms. Un espace de noms est une collection de noms (variables, fonctions, etc.) connus et accessibles dans cette portée. Lorsqu'une variable reçoit une valeur dans une fonction, une nouvelle variable est créée dans l'espace de noms de la fonction, même s'il existe une variable globale du même nom.
Utilisation de variables globales
Dans ce cas, lorsqu'une variable globale appelée "done" est référencée dans la fonction, une nouvelle variable locale du même nom est créée dans l'espace de noms de la fonction. Ce « fait » local est distinct du « fait » global. Changer le "done" local n'a aucun effet sur la variable globale.
Solution
Pour surmonter cela, le mot-clé global doit être utilisé pour référencer explicitement la variable globale dans la fonction. En utilisant global done, la fonction indique à l'interpréteur d'accéder à la variable globale "done" au lieu d'en créer une nouvelle locale.
Code modifié
Pour résoudre le problème , la fonction peut être modifiée comme suit :
<code class="python">def function(): global done for loop: code if not comply: done = True</code>
Explication
L'utilisation de global done établit une connexion entre la variable utilisée dans la fonction et la variable globale. Lorsque la fonction modifie la valeur de done, elle met à jour la même variable globale référencée initialement. Cela garantit que la boucle while du programme principal se terminera comme prévu lorsque la fonction sera définie sur True.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!