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