logo

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.



řetězec.podřetězec java

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á
DefiniceDeklarováno mimo funkceDeklarováno uvnitř funkcí
ŽivotVytvoř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í datSdílené napříč všemi funkcemiNe sdíleno; existuje pouze v rámci své funkce
RozsahJe přístupný kdekoli v programuPřístupné pouze uvnitř funkce
Potřebné parametryNepotř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)
HodnotaZměny ovlivňují celý programZměny jsou místní a neovlivňují jiné funkce