Globální a místní proměnné v Pythonu

V Pythonových proměnných hraje klíčovou roli při ukládání a správě dat. Jejich chování a dostupnost závisí na tom, kde jsou v programu definovány. V tomto článku prozkoumáme globální a místní proměnné, jak fungují a běžné scénáře s příklady.

Místní proměnné

Místní proměnné jsou vytvářeny uvnitř funkce a existují pouze během jejího provádění. Nelze k nim přistupovat mimo funkci.

Příklad 1: V tomto kódu vytváříme a přístup k místní proměnné uvnitř funkce.

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

Výstup
Hello from inside the function!  

Vysvětlení: Definujeme pozdravit() s místní proměnnou MSG a vytiskněte to. Protože MSG existuje pouze během provádění funkce, je přístupný v rámci funkce. Povolání pozdravit() Zobrazí zprávu.

Příklad 2 : V tomto příkladu vytváříme lokální proměnnou uvnitř funkce a poté se pokusíme o přístup k ní mimo funkci, která způsobuje chybu.

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

Výstup

Traceback (poslední hovor poslední):
Soubor '/home/guest/sandbox/solution.py' řádek 6 v
tisk ('vnější funkce:' msg)
NameError: Název „MSG“ není definován

Vysvětlení: msg je uvnitř místní proměnná pozdravit() a je tam pouze přístup. Jeho tisk venku způsobuje chybu, protože neexistuje globálně.

Globální proměnné

Globální proměnné jsou deklarovány mimo všechny funkce a lze je přistupovat kdekoli v programu, včetně vnitřních funkcí.

V tomto příkladu vytváříme globální proměnnou a poté k ní přistupujeme uvnitř i vně funkce.

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!  

Vysvětlení: msg je globální proměnná přístupná uvnitř i vně zobrazit() funkce. Povolání zobrazit() tiskne globální MSG a tisk MSG Mimo funkci funguje podle očekávání.

Poznámka: Pokud není proměnná nalezena uvnitř funkce (lokální rozsah), Python ji automaticky hledá v globálním rozsahu. Pokud však má místní proměnná stejný název jako globální, bude uvnitř této funkce stínit globální proměnnou.

Použití místních a globálních proměnných

Pokud je proměnná definována globálně i lokálně se stejným názvem, lokální proměnná stíny globální proměnné uvnitř funkce. Změny v místní proměnné neovlivňují globální proměnnou, pokud výslovně prohlásíte proměnnou za globální.

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

Výstup
Me too. I love Geeksforgeeks  

Vysvětlení: Uvnitř zábava() s je místní proměnná nastavena na „já také“. a vytiskne tuto hodnotu. Mimo globální s zůstává „Miluji geeksforgeeks“, takže tisk s Poté ukazuje globální hodnotu.

Úpravy globálních proměnných uvnitř funkce

Ve výchozím nastavení nelze upravit globální proměnnou uvnitř funkce, aniž by ji prohlásil za globální. Pokud zkusíte Python, vyvolá chybu, protože považuje proměnnou za místní. K úpravě globální proměnné použijte Globální klíčové slovo .

Bez globálního (způsobuje chybu)

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

Výstup

UnoundLoCalerror: místní proměnná 's' s odkazem před přiřazením

Vysvětlení: Inside Fun () Python předpokládá, že S je místní, protože se snažíme upravit. Před tímto řádkem však neexistuje žádná místní S, takže dojde k chybě.

S globálním (správně 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  

Vysvětlení:

  • Prohlášení S jako Global říká Pythonovi, aby použila proměnnou z globálního rozsahu.
  • Funkce nejprve připojí „GFG“ a poté přiřadí S.
  • Změny přetrvávají mimo funkci.

Global vs Local se stejným názvem

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  

Vysvětlení:

  • f () tiskne globální a bez jeho změny.
  • g () vytváří místní a opouštějící globální one nedotčený.
  • h () prohlašuje A jako globální a modifikuje jej.

Lokální proměnná vs. Globální proměnná

Srovnávací základ Globální proměnná Místní proměnná
Definice Deklarováno mimo funkce Deklarováno uvnitř funkcí
Život Vytvořeno, když program začne a zničen, až skončí Vytvořeno, když je funkce volána a zničena, když se vrátí
Sdílení dat Sdílené napříč všemi funkcemi Ne sdíleno; existuje pouze v rámci své funkce
Rozsah Je přístupný kdekoli v programu Přístupné pouze uvnitř funkce
Potřebné parametry Nepotřeboval žádné předávání parametrů Může být vytvořeno prostřednictvím parametrů nebo přiřazení uvnitř funkce
Skladování Spravováno v globálním oboru oboru (ne pevnou paměť) Uloženo v místním názvu funkce (rám zásobníku)
Hodnota Změny ovlivňují celý program Změny jsou místní a neovlivňují jiné funkce