V tomto článku sa dozviete o globálnom kľúčovom slove, globálnej premennej a o tom, kedy treba globálne kľúčové slová použiť.
Pred prečítaním tohto článku sa uistite, že máte základné informácie o globálnych, miestnych a nemenných premenných premennej Python.
Čo je globálne kľúčové slovo
V jazyku Python global
umožňuje kľúčové slovo modifikovať premennú mimo aktuálneho rozsahu. Používa sa na vytvorenie globálnej premennej a na vykonávanie zmien v lokálnom kontexte.
Pravidlá globálneho kľúčového slova
Základné pravidlá pre global
kľúčové slovo v Pythone sú:
- Keď vytvoríme premennú vo vnútri funkcie, je predvolene lokálna.
- Keď definujeme premennú mimo funkcie, je predvolene globálna. Nemusíte používať
global
kľúčové slovo. global
Kľúčové slovo používame na čítanie a zápis globálnej premennej vo vnútri funkcie.- Použitie
global
kľúčového slova mimo funkcie nemá žiadny vplyv.
Použitie globálneho kľúčového slova
Zoberme si príklad.
Príklad 1: Prístup k globálnej premennej zvnútra funkcie
c = 1 # global variable def add(): print(c) add()
Keď spustíme vyššie uvedený program, výstup bude:
1
Môžeme však mať niektoré scenáre, keď budeme musieť upraviť globálnu premennú zvnútra funkcie.
Príklad 2: Úprava globálnej premennej zvnútra funkcie
c = 1 # global variable def add(): c = c + 2 # increment c by 2 print(c) add()
Keď spustíme vyššie uvedený program, výstup zobrazí chybu:
UnboundLocalError: lokálna premenná 'c' uvedená pred priradením
Je to tak preto, lebo máme prístup iba k globálnej premennej, ale nemôžeme ju meniť z vnútra funkcie.
Riešením je použitie global
kľúčového slova.
Príklad 3: Zmena globálnej premennej z vnútra funkcie pomocou globálnej
c = 0 # global variable def add(): global c c = c + 2 # increment by 2 print("Inside add():", c) add() print("In main:", c)
Keď spustíme vyššie uvedený program, výstup bude:
Vnútri add (): 2 Hlavné: 2
Vo vyššie uvedenom programe definujeme c ako globálne kľúčové slovo vo vnútri add()
funkcie.
Potom zvýšime premennú c o 1
, tj c = c + 2
. Potom voláme add()
funkciu. Nakoniec vytlačíme globálnu premennú c.
Ako môžeme vidieť, zmenou tiež došlo na globálne premenné mimo funkcie c = 2
.
Globálne premenné naprieč modulmi Pythonu
V Pythone vytvoríme jeden modul config.py
na uchovávanie globálnych premenných a zdieľanie informácií medzi modulmi Pythonu v rámci toho istého programu.
Takto môžeme zdieľať globálne premenné naprieč modulmi pythonu.
Príklad 4: Zdieľanie globálnej premennej naprieč modulmi Pythonu
Vytvorte config.py
súbor na ukladanie globálnych premenných
a = 0 b = "empty"
Vytvorte update.py
súbor na zmenu globálnych premenných
import config config.a = 10 config.b = "alphabet"
Vytvorte main.py
súbor na testovanie zmien hodnoty
import config import update print(config.a) print(config.b)
Keď spustíme main.py
súbor, výstup bude
10 abecedy
Vo vyššie uvedenom, vytvorili sme tri súbory: config.py
, update.py
a main.py
.
Modul config.py
ukladá globálne premenné a a b. V update.py
súbore importujeme config.py
modul a upravíme hodnoty a a b. Podobne v main.py
súbore, dovážame ako config.py
a update.py
modul. Na záver vytlačíme a otestujeme hodnoty globálnych premenných bez ohľadu na to, či sú alebo nie sú zmenené.
Globálne v vnorených funkciách
Takto môžete použiť globálnu premennú vo vnorenej funkcii.
Príklad 5: Použitie globálnej premennej vnorenej funkcie
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ýstup je:
Predtým, ako zavoláte na lištu: 20 Volajúcu lištu teraz Po volaní na lištu: 20 x hlavné: 25
Vo vyššie uvedenom programe sme deklarovali globálnu premennú vo vnorenej funkcii bar()
. Vo vnútri foo()
funkcie x nemá žiadny vplyv na globálne kľúčové slovo.
Pred a po volaní bar()
má premenná x hodnotu miestnej premennej, tj x = 20
. Mimo foo()
funkcie bude mať premenná x hodnotu definovanú vo bar()
funkcii, tj x = 25
. Je to tak preto, lebo sme pomocou global
kľúčového slova v x vytvorili globálnu premennú vo vnútri bar()
funkcie (lokálny rozsah).
Ak urobíme nejaké zmeny vo vnútri bar()
funkcie, zmeny sa objavia mimo lokálneho rozsahu, tj foo()
.