Globale en lokale variabelen in Python

In Python spelen variabelen een sleutelrol bij het opslaan en beheren van gegevens. Hun gedrag en toegankelijkheid zijn afhankelijk van waar ze in het programma zijn gedefinieerd. In dit artikel onderzoeken we hoe globale en lokale variabelen werken en geven we algemene scenario's met voorbeelden.

Lokale variabelen

Lokale variabelen worden binnen een functie aangemaakt en bestaan ​​alleen tijdens de uitvoering ervan. Ze zijn niet toegankelijk van buiten de functie.

Voorbeeld 1: In deze code maken en gebruiken we een lokale variabele binnen een functie.

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

Uitvoer
Hello from inside the function!  

Uitleg: Wij definiëren begroeten() met een lokale variabele bericht en druk het af. Omdat msg alleen bestaat tijdens de uitvoering van de functie, is het toegankelijk binnen de functie. Roeping begroeten() geeft het bericht weer.

Voorbeeld 2 : In dit voorbeeld maken we een lokale variabele binnen een functie en proberen we deze vervolgens buiten de functie te openen, wat een fout veroorzaakt.

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

Uitvoer

Traceback (meest recente oproep laatste):
Bestand '/home/guest/sandbox/Solution.py' regel 6 inch
print('Buitenfunctie:' msg)
NameError: naam 'msg' is niet gedefinieerd

Uitleg: bericht is een lokale variabele binnenin begroeten() en is alleen daar toegankelijk. Als u het buiten afdrukt, ontstaat er een fout omdat het globaal niet bestaat.

Globale variabelen

Globale variabelen worden buiten alle functies gedeclareerd en zijn overal in het programma toegankelijk, ook binnen functies.

In dit voorbeeld maken we een globale variabele en benaderen deze vervolgens zowel binnen als buiten een functie.

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

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

Uitleg: bericht is een globale variabele die zowel binnen als buiten de weergave() functie. Roeping weergave() drukt de globale af bericht en afdrukken bericht buiten de functie werkt zoals verwacht.

Opmerking: Als een variabele niet binnen een functie (lokaal bereik) wordt gevonden, zoekt Python er automatisch naar in het globale bereik. Als een lokale variabele echter dezelfde naam heeft als een globale variabele, zal deze de globale variabele binnen die functie overschaduwen.

Gebruik van lokale en globale variabelen

Als een variabele zowel globaal als lokaal met dezelfde naam is gedefinieerd, overschaduwt de lokale variabele de globale variabele binnen de functie. Wijzigingen in de lokale variabele hebben geen invloed op de globale variabele, tenzij u de variabele expliciet als globaal declareert.

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

Uitvoer
Me too. I love Geeksforgeeks  

Uitleg: Binnen plezier() S is een lokale variabele die is ingesteld op 'Ik ook.' en drukt die waarde af. Buiten het mondiale S blijft 'I love Geeksforgeeks' dus afdrukken S daarna toont de globale waarde.

Globale variabelen binnen een functie wijzigen

Standaard kan men een globale variabele binnen een functie niet wijzigen zonder deze als globaal te declareren. Als je het probeert, zal Python een foutmelding geven omdat het de variabele als lokaal behandelt. Om een ​​globale variabele te wijzigen, gebruikt u de globaal trefwoord .

Zonder globaal (veroorzaakt fouten)

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

Uitvoer

UnboundLocalError: lokale variabele 's' waarnaar wordt verwezen vóór de toewijzing

Uitleg: Inside fun() Python gaat ervan uit dat s lokaal is, omdat we het proberen te wijzigen. Maar er bestaat geen lokale s vóór die regel, dus er treedt een fout op.

Met globaal (werkt correct)

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  )   

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

Uitleg:

  • Door s als globaal te declareren, vertelt Python dat hij de variabele uit het globale bereik moet gebruiken.
  • De functie voegt eerst 'GFG' toe en wijst vervolgens s opnieuw toe.
  • Veranderingen blijven buiten de functie bestaan.

Globaal versus lokaal met dezelfde naam

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  )   

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

Uitleg:

  • f() drukt globale a af zonder deze te wijzigen.
  • g() creëert een lokale en laat een globale onaangeroerd.
  • h() declareert a als globaal en wijzigt deze.

Lokale variabele versus globale variabele

Vergelijkingsbasis Globale variabele Lokale variabele
Definitie Aangegeven buiten de functies Aangegeven binnen een function
Levensduur Gemaakt wanneer het programma start en vernietigd wanneer het eindigt Gemaakt wanneer de functie wordt aangeroepen en vernietigd wanneer deze terugkeert
Gegevens delen Gedeeld door alle functies Niet gedeeld; bestaat alleen binnen zijn functie
Domein Kan overal in het programma worden geopend Alleen toegankelijk binnen de functie
Parameters nodig Het doorgeven van parameters is niet nodig Kan worden gemaakt via parameters of toewijzingen binnen de functie
Opslag Beheerd in de globale naamruimte (geen vaste geheugenlocatie) Opgeslagen in de lokale naamruimte van de functie (stapelframe)
Waarde Wijzigingen hebben invloed op het gehele programma Wijzigingen zijn lokaal en hebben geen invloed op andere functies