V tomto článku se dozvíte o globálním klíčovém slově, globální proměnné a o tom, kdy použít globální klíčová slova.
Než si přečtete tento článek, ujistěte se, že máte základní informace o globálních, lokálních a nelokálních proměnných Pythonu.
Co je globální klíčové slovo
V Pythonu vám global
klíčové slovo umožňuje upravit proměnnou mimo aktuální rozsah. Používá se k vytvoření globální proměnné ak provedení změn proměnné v místním kontextu.
Pravidla globálního klíčového slova
Základní pravidla pro global
klíčové slovo v Pythonu jsou:
- Když vytvoříme proměnnou uvnitř funkce, je ve výchozím nastavení lokální.
- Když definujeme proměnnou mimo funkci, je ve výchozím nastavení globální. Nemusíte používat
global
klíčové slovo. global
Klíčové slovo používáme ke čtení a zápisu globální proměnné uvnitř funkce.- Použití
global
klíčového slova mimo funkci nemá žádný účinek.
Použití globálního klíčového slova
Vezměme si příklad.
Příklad 1: Přístup ke globální proměnné zevnitř funkce
c = 1 # global variable def add(): print(c) add()
Když spustíme výše uvedený program, výstup bude:
1
Možná však máme některé scénáře, kdy musíme změnit globální proměnnou zevnitř funkce.
Příklad 2: Úprava globální proměnné zevnitř funkce
c = 1 # global variable def add(): c = c + 2 # increment c by 2 print(c) add()
Když spustíme výše uvedený program, výstup zobrazí chybu:
UnboundLocalError: místní proměnná 'c' odkazovaná před přiřazením
Je to proto, že máme přístup pouze k globální proměnné, ale nemůžeme ji měnit zevnitř funkce.
Řešením je použití global
klíčového slova.
Příklad 3: Změna globální proměnné zevnitř funkce pomocí globální
c = 0 # global variable def add(): global c c = c + 2 # increment by 2 print("Inside add():", c) add() print("In main:", c)
Když spustíme výše uvedený program, výstup bude:
Inside add (): 2 Hlavní: 2
Ve výše uvedeném programu definujeme c jako globální klíčové slovo uvnitř add()
funkce.
Potom zvýšíme proměnnou c o 1
, tj c = c + 2
. Poté voláme add()
funkci. Nakonec vytiskneme globální proměnnou c.
Jak můžeme vidět, změnou také došlo na globální proměnné mimo funkce c = 2
.
Globální proměnné napříč moduly Pythonu
V Pythonu vytvoříme jeden modul, který config.py
bude obsahovat globální proměnné a sdílet informace mezi moduly Pythonu v rámci stejného programu.
Zde je způsob, jak můžeme sdílet globální proměnné napříč moduly pythonu.
Příklad 4: Sdílejte globální proměnnou napříč moduly Pythonu
Vytvořte config.py
soubor pro uložení globálních proměnných
a = 0 b = "empty"
Vytvořte update.py
soubor, chcete-li změnit globální proměnné
import config config.a = 10 config.b = "alphabet"
Vytvořte main.py
soubor, abyste otestovali změny hodnoty
import config import update print(config.a) print(config.b)
Když spustíme main.py
soubor, výstup bude
10 abecedy
Ve výše uvedeném, vytvořili jsme tři soubory: config.py
, update.py
a main.py
.
Modul config.py
ukládá globální proměnné a a b. V update.py
souboru importujeme config.py
modul a upravíme hodnoty a a b. Podobně v main.py
souboru importujeme jak modul, config.py
tak update.py
modul. Nakonec vytiskneme a otestujeme hodnoty globálních proměnných, ať už jsou či nejsou změněny.
Globální vnořené funkce
Zde je způsob, jak můžete použít globální proměnnou ve vnořené funkci.
Příklad 5: Použití globální proměnné v vnořené funkci
def foo(): x = 20 def bar(): global x x = 25 print("Before calling bar: ", x) print("Calling bar now") bar() print("After calling bar: ", x) foo() print("x in main: ", x)
Výstupem je:
Před voláním do baru: 20 Volající bar nyní Po volání do baru: 20 x hlavní: 25
Ve výše uvedeném programu jsme deklarovali globální proměnnou uvnitř vnořené funkce bar()
. foo()
Funkce Inside nemá x žádný vliv na globální klíčové slovo.
Před a po volání bar()
má proměnná x hodnotu lokální proměnné, tj x = 20
. Mimo foo()
funkci bude mít proměnná x hodnotu definovanou ve bar()
funkci, tj x = 25
. Je to proto, že jsme použili global
klíčové slovo v x k vytvoření globální proměnné uvnitř bar()
funkce (lokální rozsah).
Pokud provedeme nějaké změny uvnitř bar()
funkce, objeví se změny mimo místní rozsah, tj foo()
.