logo

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.



middelste CSS-knop

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
DefinitieAangegeven buiten de functiesAangegeven binnen een function
LevensduurGemaakt wanneer het programma start en vernietigd wanneer het eindigtGemaakt wanneer de functie wordt aangeroepen en vernietigd wanneer deze terugkeert
Gegevens delenGedeeld door alle functiesNiet gedeeld; bestaat alleen binnen zijn functie
DomeinKan overal in het programma worden geopendAlleen toegankelijk binnen de functie
Parameters nodigHet doorgeven van parameters is niet nodigKan worden gemaakt via parameters of toewijzingen binnen de functie
OpslagBeheerd in de globale naamruimte (geen vaste geheugenlocatie)Opgeslagen in de lokale naamruimte van de functie (stapelframe)
WaardeWijzigingen hebben invloed op het gehele programmaWijzigingen zijn lokaal en hebben geen invloed op andere functies