Selles artiklis saate teada globaalse märksõna, globaalse muutuja ja millal globaalseid märksõnu kasutada.
Enne selle artikli lugemist veenduge, et teil oleks Python globaalsete, kohalike ja mittekohalike muutujate põhitõed.
Mis on globaalne märksõna
Pythonis global
võimaldab märksõna muuta muutujat väljaspool praegust ulatust. Seda kasutatakse globaalse muutuja loomiseks ja muutuja muutmiseks kohalikus kontekstis.
Üldise märksõna reeglid
global
Pythoni märksõna põhireeglid on järgmised:
- Kui loome funktsiooni sisse muutuja, on see vaikimisi lokaalne.
- Kui defineerime muutuja väljaspool funktsiooni, on see vaikimisi globaalne. Te ei pea
global
märksõna kasutama . - Me kasutame
global
märksõna funktsiooni globaalse muutuja lugemiseks ja kirjutamiseks. - Kasutamine
global
märksõna väljaspool funktsiooni ei mõjuta.
Ülemaailmse märksõna kasutamine
Võtame näite.
Näide 1: juurdepääs funktsiooni sees olevale globaalsele muutujale
c = 1 # global variable def add(): print(c) add()
Ülaltoodud programmi käivitamisel on väljund:
1
Kuid meil võib olla mõni stsenaarium, kus peame muutma globaalset muutujat funktsiooni seest.
Näide 2: globaalse muutuja muutmine funktsiooni seest
c = 1 # global variable def add(): c = c + 2 # increment c by 2 print(c) add()
Kui käivitame ülaltoodud programmi, näitab väljund viga:
UnboundLocalError: enne määramist viidatud kohalikule muutujale „c”
Seda seetõttu, et meil on juurdepääs ainult globaalsele muutujale, kuid me ei saa seda funktsiooni sees muuta.
Selle lahenduseks on global
märksõna kasutamine.
Näide 3: Globaalse muutuja muutmine funktsiooni seest globaalse muutuja abil
c = 0 # global variable def add(): global c c = c + 2 # increment by 2 print("Inside add():", c) add() print("In main:", c)
Ülaltoodud programmi käivitamisel on väljund:
Sees lisa (): 2 Põhiliselt: 2
Eespool toodud programmis määratleme add()
funktsiooni globaalse märksõnana c .
Seejärel suurendame muutujat c 1
, st c = c + 2
. Pärast seda kutsume add()
funktsiooni. Lõpuks printime globaalse muutuja c.
Nagu näeme, toimus muutus ka funktsiooni välisel globaalsel muutujal c = 2
.
Üldised muutujad Pythoni moodulites
Pythonis loome ühe mooduli config.py
globaalsete muutujate hoidmiseks ja teabe jagamiseks Pythoni moodulite vahel ühes ja samas programmis.
Nii saame globaalseid muutujaid jagada Pythoni moodulite vahel.
Näide 4: jagage Pythoni moodulite globaalset muutujat
Looge config.py
fail globaalsete muutujate salvestamiseks
a = 0 b = "empty"
Üldiste update.py
muutujate muutmiseks looge fail
import config config.a = 10 config.b = "alphabet"
main.py
Väärtuse muutuste testimiseks looge fail
import config import update print(config.a) print(config.b)
Kui käivitame main.py
faili, on väljund
10 tähestikku
Eespool oleme loonud kolm faili: config.py
, update.py
ja main.py
.
Moodul config.py
salvestab globaalsed muutujad a ja b. Kui update.py
faili Toome config.py
moodul ja muuta väärtusi ja b. Samamoodi main.py
impordime failis mõlemad config.py
ja update.py
mooduli. Lõpuks printime ja testime globaalsete muutujate väärtusi, olenemata sellest, kas neid muudetakse või mitte.
Globaalne pesastatud funktsioonides
Siit saate teada, kuidas pesastatud funktsioonis saab kasutada globaalset muutujat.
Näide 5: globaalse muutuja kasutamine pesastatud funktsioonis
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äljund on:
Enne ribale helistamist: 20 Helistamisriba kohe Pärast helistamise riba: 20 x põhiliselt: 25
Ülalolevas programmis kuulutasime pesastatud funktsiooni sisse globaalse muutuja bar()
. foo()
Funktsiooni sees ei mõjuta x globaalset märksõna.
Enne ja pärast helistamist bar()
võtab muutuja x kohaliku muutuja st x = 20
. Väljaspool foo()
funktsiooni saab muutuja x bar()
funktsioonis määratletud väärtuse, st x = 25
. Seda seetõttu, et oleme kasutanud global
märksõna x-s bar()
funktsiooni globaalse muutuja loomiseks (kohalik ulatus).
Kui teeme bar()
funktsiooni sees muudatusi, ilmnevad muudatused väljaspool kohalikku ulatust, st foo()
.