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.
Pythondef 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.
Pythonmsg = '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.
Pythondef 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)
Pythondef 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)
Pythons = '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
Pythona = 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 |