Globálne a miestne premenné v Pythone

V premenných Python zohrávajú kľúčovú úlohu pri ukladaní a správe údajov. Ich správanie a dostupnosť závisia od toho, kde sú definované v programe. V tomto článku preskúmame globálne a miestne premenné, ako fungujú a bežné scenáre s príkladmi.

Miestne premenné

Miestne premenné sa vytvárajú vo vnútri funkcie a existujú iba počas jej vykonávania. Nemožno k nim pristupovať zvonku funkcie.

Príklad 1: V tomto kóde vytvárame a pristupujeme k miestnej premennej vo funkcii.

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

Výstup
Hello from inside the function!  

Vysvetlenie: Definujeme pozdrav () s lokálnou premennou MSG a vytlačte to. Pretože MSG existuje iba počas vykonávania funkcie, je prístupná v rámci funkcie. Volanie pozdrav () Zobrazí správu.

Príklad 2 : V tomto príklade vytvárame vo funkcii lokálnu premennú a potom sa k nej snažíme získať prístup mimo funkcie, ktorá spôsobuje chybu.

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

Výstup

TraceBack (posledný hovor posledný):
Súbor '/home/guest/sandbox/solution.py' riadok 6 v
tlač ('vonkajšia funkcia:' msg)
NameError: meno „msg“ nie je definované

Vysvetlenie: MSG je miestna premenná vo vnútri pozdrav () a je tu prístup iba tam. Tlač vonku spôsobuje chybu, pretože neexistuje celosvetovo.

Globálne premenné

Globálne premenné sú deklarované mimo všetkých funkcií a sú k nim prístup kdekoľvek v programe vrátane vnútorných funkcií.

V tomto príklade vytvárame globálnu premennú a potom k nej pristupujeme vo vnútri aj mimo funkcie.

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

Výstup
Inside function: Python is awesome! Outside function: Python is awesome!  

Vysvetlenie: MSG je globálna premenná prístupná vo vnútri aj mimo displej () funkcia. Volanie displej () Vytlačí globálne MSG a tlač MSG Mimo funkcie funguje podľa očakávania.

Poznámka: Ak sa premenná nenájde vo vnútri funkcie (miestneho rozsahu) Python, automaticky ju vyhľadá v globálnom rozsahu. Ak však miestna premenná má rovnaké meno ako globálny, zatieni globálnu premennú do tejto funkcie.

Použitie miestnych a globálnych premenných

Ak je premenná definovaná globálne aj lokálne s rovnakým názvom, miestna premenná tiene globálna premenná vo vnútri funkcie. Zmeny v miestnej premennej neovplyvňujú globálnu premennú, pokiaľ túto premennú výslovne nedôverujete ako globálnu.

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

Výstup
Me too. I love Geeksforgeeks  

Vysvetlenie: Vo vnútri zábava () siež je miestna premenná nastavená na „ja“. a vytlačí túto hodnotu. Mimo globálneho siež Zostáva „milujem geeksforgeeks“, takže tlač siež Potom ukazuje globálnu hodnotu.

Modifikácia globálnych premenných vo funkcii

V predvolenom nastavení nie je možné upraviť globálnu premennú vo funkcii bez toho, aby ju deklarovala ako globálnu. Ak vyskúšate, Python vyvolá chybu, pretože s premennou považuje miestnu. Upraviť globálnu premennú používať globálne kľúčové slovo .

Bez globálneho (spôsobuje chybu)

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

Výstup

UnboundloCalerror: Local Premenná 's' odkazom na predradenie

Vysvetlenie: Inside Fun () Python predpokladá, že S je miestny, pretože sa ho snažíme upraviť. Ale pred týmto riadkom neexistuje žiadne miestne S, takže dôjde k chybe.

S globálnym (správne funguje)

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  )   

Výstup
Python is great! GFG Look for GeeksforGeeks Python Section Look for GeeksforGeeks Python Section  

Vysvetlenie:

  • Vyhlásenie S ako Global hovorí Pythonovi, aby použil premennú z globálneho rozsahu.
  • Funkcia najprv pripojí „GFG“ a potom ressigns s.
  • Zmeny pretrvávajú mimo funkcie.

Global vs Local s rovnakým názvom

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  )   

Výstup
global: 1 f(): 1 global: 1 g(): 2 global: 1 h(): 3 global: 3  

Vysvetlenie:

  • f () tlačí globálne A bez toho, aby to zmenilo.
  • G () vytvára miestny a opúšťajúci globálny človek nedotknutý.
  • H () vyhlasuje ako globálny a upravuje ho.

Lokálna premenná verzus globálna premenná

Porovnávacia základňa Globálna premenná Miestna premenná
Definícia Vyhlásené mimo funkcií Vyhlásené vo funkciách
Celoživotný Vytvorené, keď program začne a zničí, keď končí Vytvorené, keď sa funkcia volá a zničí, keď sa vráti
Zdieľanie údajov Zdieľané vo všetkých funkciách Nezdieľané; existuje iba v rámci svojej funkcie
Rozsah Je prístupný kdekoľvek v programe Prístupné iba vo vnútri funkcie
Potrebné parametre Nie je potrebné prejsť žiadny parameter Sa môže vytvárať prostredníctvom parametrov alebo priradení vo vnútri funkcie
Ukladanie Spravované v globálnom mennom priestore (nie pevne umiestnenie pamäte) Uložené v miestnom mennom priestore funkcie (rám Stack)
Hodnota Zmeny ovplyvňujú celý program Zmeny sú miestne a neovplyvňujú iné funkcie