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 portant le 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 ce problème, 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 :
def function():
global done
for loop:
code
if not comply:
done = True
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.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3