Variables globales et locales en Python

En Python, les variables jouent un rôle clé dans le stockage et la gestion des données. Leur comportement et leur accessibilité dépendent de l'endroit où ils sont définis dans le programme. Dans cet article, nous explorerons les variables globales et locales, leur fonctionnement et les scénarios courants avec des exemples.

Variables locales

Les variables locales sont créées à l'intérieur d'une fonction et n'existent que lors de son exécution. Ils ne sont pas accessibles depuis l’extérieur de la fonction.

Exemple 1 : Dans ce code, nous créons et accédons à une variable locale dans une fonction.

Python
   def   greet  ():   msg   =   'Hello from inside the function!'   print  (  msg  )   greet  ()   

Sortir
Hello from inside the function!  

Explication: Nous définissons saluer() avec une variable locale message et imprimez-le. Puisque msg n'existe que pendant l'exécution de la fonction, il est accessible au sein de la fonction. Appel saluer() affiche le message.

Exemple 2 : Dans cet exemple, nous créons une variable locale à l'intérieur d'une fonction, puis essayons d'y accéder en dehors de la fonction, ce qui provoque une erreur.

Python
   def   greet  ():   msg   =   'Hello!'   print  (  'Inside function:'     msg  )   greet  ()   print  (  'Outside function:'     msg  )   

Sortir

Traceback (dernier appel le plus récent) :
Fichier '/home/guest/sandbox/Solution.py', ligne 6 dans
print('Fonction extérieure :' msg)
NameError : le nom 'msg' n'est pas défini

Explication : msg est une variable locale à l'intérieur saluer() et n'est accessible que là-bas. L'imprimer à l'extérieur provoque une erreur car il n'existe pas globalement.

Variables globales

Les variables globales sont déclarées en dehors de toutes les fonctions et sont accessibles n'importe où dans le programme, y compris à l'intérieur des fonctions.

Dans cet exemple, nous créons une variable globale, puis y accédons à la fois à l'intérieur et à l'extérieur d'une fonction.

Python
   msg   =   'Python is awesome!'   def   display  ():   print  (  'Inside function:'     msg  )   display  ()   print  (  'Outside function:'     msg  )   

Sortir
Inside function: Python is awesome! Outside function: Python is awesome!  

Explication : msg est une variable globale accessible à la fois à l'intérieur et à l'extérieur du afficher() fonction. Appel afficher() imprime le global message et impression message en dehors de la fonction fonctionne comme prévu.

Note: Si une variable n'est pas trouvée dans une fonction (portée locale), Python la recherche automatiquement dans la portée globale. Cependant, si une variable locale a le même nom qu'une variable globale, elle masquera la variable globale à l'intérieur de cette fonction.

Utilisation de variables locales et globales

Si une variable est définie à la fois globalement et localement avec le même nom, la variable locale masque la variable globale à l'intérieur de la fonction. Les modifications apportées à la variable locale n'affectent pas la variable globale, sauf si vous déclarez explicitement la variable comme globale.

Python
   def   fun  ():   s   =   'Me too.'   print  (  s  )   s   =   'I love Geeksforgeeks'   fun  ()   print  (  s  )   

Sortir
Me too. I love Geeksforgeeks  

Explication: À l'intérieur amusant() s est une variable locale définie sur « Moi aussi ». et imprime cette valeur. En dehors du monde s reste 'J'aime Geeksforgeeks' donc j'imprime s affiche ensuite la valeur globale.

Modification de variables globales dans une fonction

Par défaut, on ne peut pas modifier une variable globale à l'intérieur d'une fonction sans la déclarer comme globale. Si vous essayez, Python générera une erreur car il traite la variable comme locale. Pour modifier une variable globale utilisez le mot clé global .

Sans global (provoque une erreur)

Python
   def   fun  ():   s   +=   ' GFG'   # Error: Python thinks s is local   print  (  s  )   s   =   'I love GeeksforGeeks'   fun  ()   

Sortir

UnboundLocalError : variable locale 's' référencée avant l'affectation

Explication: À l'intérieur de fun(), Python suppose que s est local puisque nous essayons de le modifier. Mais aucun local n'existe avant cette ligne, donc une erreur se produit.

Avec global (fonctionne correctement)

Python
   s   =   'Python is great!'   def   fun  ():   global   s   s   +=   ' GFG'   # Modify global variable   print  (  s  )   s   =   'Look for GeeksforGeeks Python Section'   # Reassign global   print  (  s  )   fun  ()   print  (  s  )   

Sortir
Python is great! GFG Look for GeeksforGeeks Python Section Look for GeeksforGeeks Python Section  

Explication:

  • Déclarer s comme global indique à Python d'utiliser la variable de la portée globale.
  • La fonction ajoute d'abord 'GFG' puis réaffecte s.
  • Les modifications persistent en dehors de la fonction.

Global vs Local avec le même nom

Python
   a   =   1   # Global variable   def   f  ():   print  (  'f():'     a  )   # Uses global a   def   g  ():   a   =   2   # Local shadows global   print  (  'g():'     a  )   def   h  ():   global   a   a   =   3   # Modifies global a   print  (  'h():'     a  )   print  (  'global:'     a  )   f  ()   print  (  'global:'     a  )   g  ()   print  (  'global:'     a  )   h  ()   print  (  'global:'     a  )   

Sortir
global: 1 f(): 1 global: 1 g(): 2 global: 1 h(): 3 global: 3  

Explication:

  • f() imprime un a global sans le modifier.
  • g() crée un local et un global en laissant intact.
  • h() déclare a comme global et le modifie.

Variable locale vs variable globale

Base de comparaison Variable globale Variable locale
Définition Déclaré en dehors des fonctions Déclaré dans une fonction
Durée de vie Créé au démarrage du programme et détruit à la fin Créé lorsque la fonction est appelée et détruit lors de son retour
Partage de données Partagé entre toutes les fonctions Non partagé ; n'existe que dans le cadre de sa fonction
Portée Accessible n'importe où dans le programme Accessible uniquement à l'intérieur de la fonction
Paramètres nécessaires Aucun passage de paramètre nécessaire Peut être créé via des paramètres ou des affectations à l'intérieur de la fonction
Stockage Géré dans l'espace de noms global (emplacement mémoire non fixe) Stocké dans l'espace de noms local de la fonction (stack frame)
Valeur Les changements affectent l'ensemble du programme Les changements sont locaux et n’affectent pas les autres fonctions