"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Pourquoi l’appel de fonction ne met-il pas à jour la variable globale ?

Pourquoi l’appel de fonction ne met-il pas à jour la variable globale ?

Publié le 2024-11-01
Parcourir:267

Why Does Function Call Not Update Global Variable?

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.

Déclaration de sortie Cet article est réimprimé à l'adresse : 1729310358. En cas d'infraction, veuillez contacter [email protected] pour le supprimer.
Dernier tutoriel Plus>

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