Globális és helyi változók a Pythonban
A Python változókban kulcsszerepet játszanak az adatok tárolásában és kezelésében. Viselkedésük és akadálymentességük attól függ, hogy hol vannak meghatározva a programban. Ebben a cikkben a globális és a helyi változókat vizsgáljuk meg, hogyan működnek, és a közös forgatókönyveket példákkal.
Helyi változók
A helyi változókat egy függvényen belül hozták létre, és csak annak végrehajtása során léteznek. Nem érhetők el a funkción kívül.
1. példa: Ebben a kódban egy helyi változót hozunk létre és hozzáférünk egy függvényen belül.
Python def greet (): msg = 'Hello from inside the function!' print ( msg ) greet ()
Kibocsátás
Hello from inside the function!
Magyarázat: Meghatározzuk köszönt() egy helyi változóval MSG És nyomtassa ki. Mivel az MSG csak a funkció végrehajtása során létezik, a függvényen belül elérhető. Hívás köszönt() Megjeleníti az üzenetet.
2. példa : Ebben a példában egy helyi változót hozunk létre egy függvényen belül, majd megpróbáljuk hozzáférni annak olyan függvényen kívül, amely hibát okoz.
Python def greet (): msg = 'Hello!' print ( 'Inside function:' msg ) greet () print ( 'Outside function:' msg )
Kibocsátás
Traceback (a legfrissebb hívás utoljára):
Fájl '/home/guest/sandbox/solution.py' 6. sor
Nyomtatás ('KÜLSŐ FUNKCIÓ:' MSG)
NAMERROR: A 'MSG' név nincs meghatározva
Magyarázat: MSG egy helyi változó van benne köszönt() és csak ott lehet elérni. A külső kinyomtatása hibát okoz, mert nem létezik globálisan.
Globális változók
A globális változókat minden funkción kívül deklarálják, és a program bármely pontján hozzáférhetők, beleértve a belső funkciókat is.
Ebben a példában létrehozunk egy globális változót, majd hozzáférünk egy függvényen belül és kívül.
Python msg = 'Python is awesome!' def display (): print ( 'Inside function:' msg ) display () print ( 'Outside function:' msg )
Kibocsátás
Inside function: Python is awesome! Outside function: Python is awesome!
Magyarázat: MSG egy globális változó, amely mind belül, mind kívül elérhető kijelző() funkció. Hívás kijelző() kinyomtatja a globális MSG és nyomtatás MSG A funkción kívül a várt módon működik.
Jegyzet: Ha egy változó nem található meg egy függvényben (helyi hatókör), a Python automatikusan keresi a globális hatókörben. Ha azonban egy helyi változónak megegyezik a globális névvel, akkor a globális változót árnyékolja a funkció belsejében.
Helyi és globális változók használata
Ha egy változót világszerte és helyben is meghatároznak, ugyanazzal a névvel, akkor a helyi változó árnyékolja a globális változót a függvényen belül. A helyi változó változásai nem befolyásolják a globális változót, hacsak kifejezetten a változót globálisnak nyilvánítják.
Python def fun (): s = 'Me too.' print ( s ) s = 'I love Geeksforgeeks' fun () print ( s )
Kibocsátás
Me too. I love Geeksforgeeks
Magyarázat: Belső szórakoztató () S egy helyi változó, amely a 'Me Too' -hoz van beállítva. és kinyomtatja ezt az értéket. A globálison kívül S maradjon „szeretem a geeksforgeekks” így a nyomtatást S Utána megmutatja a globális értéket.
A globális változók módosítása egy függvényen belül
Alapértelmezés szerint nem módosíthatja a globális változót egy függvényen belül anélkül, hogy globálisnak nyilvánítaná. Ha kipróbálja a Python, akkor hibát okoz, mert a változót helyiként kezeli. A globális változó módosításához használja a globális kulcsszó -
Globális nélkül (hibát okoz)
Python def fun (): s += ' GFG' # Error: Python thinks s is local print ( s ) s = 'I love GeeksforGeeks' fun ()
Kibocsátás
UnontoundlocalError: Az 'S' helyi változó hivatkozik a hozzárendelés előtt
Magyarázat: Inside Fun () Python feltételezi, hogy S local, mivel megpróbáljuk módosítani. De a sor előtt nincs helyi S, így hiba következik be.
A globális (helyesen működik)
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 )
Kibocsátás
Python is great! GFG Look for GeeksforGeeks Python Section Look for GeeksforGeeks Python Section
Magyarázat:
- Az S globális bejelentése azt mondja Pythonnak, hogy használja a globális hatókör változóját.
- A funkció először a „GFG” -et csatolja, majd kinevezi az S -t.
- A változások a funkción kívül fennmaradnak.
Globális vs helyi azonos nevű
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 )
Kibocsátás
global: 1 f(): 1 global: 1 g(): 2 global: 1 h(): 3 global: 3
Magyarázat:
- f () a globális A -t nyomtatja, anélkül, hogy megváltoztatná.
- g () létrehoz egy helyi A -t, hogy a globális lehetőséget érintetlenül hagyja el.
- h () az A -t globálisnak nyilvánítja, és módosítja azt.
Helyi változó vs globális változó
| Összehasonlítás | Globális változó | Helyi változó |
|---|---|---|
| Meghatározás | A funkciókon kívül bejelentették | Egy funkciókon belül deklarálták |
| Élettartam | Akkor jött létre, amikor a program elindul és megsemmisül, amikor véget ér | Akkor hozták létre, amikor a funkciót hívják és megsemmisítik, amikor visszatér |
| Adatmegosztás | Minden funkcióban megosztva | Nem osztották meg; csak a funkcióján belül létezik |
| Hatókör | Hozzáférhető a program bárhol | Csak a funkción belül érhető el |
| Szükséges paraméterek | Nincs szükség paraméter átadására | Létrehozható a függvényen belüli paraméterekkel vagy hozzárendelésekkel |
| Tárolás | A globális névtérben kezelve (nem rögzített memória helye) | A funkció helyi névtérben tárolva (verem keret) |
| Érték | A változások befolyásolják a teljes programot | A változások helyi és nem befolyásolják más funkciókat |