„Python“ kintamuose vaidina pagrindinį vaidmenį saugant ir valdant duomenis. Jų elgesys ir prieinamumas priklauso nuo to, kur jie yra apibrėžti programoje. Šiame straipsnyje mes išnagrinėsime globalius ir vietinius kintamuosius, kaip jie veikia, ir bendrus scenarijus su pavyzdžiais.
Vietiniai kintamieji
Vietiniai kintamieji yra sukurti funkcijos viduje ir egzistuoja tik vykdant. Jų negalima pasiekti iš funkcijos.
pawandeep rajan
1 pavyzdys: Šiame kode mes kuriame ir pasiekiame vietinį kintamąjį funkcijos viduje.
Pythondef greet(): msg = 'Hello from inside the function!' print(msg) greet()
Išvestis
Hello from inside the function!
Paaiškinimas: Mes apibrėžiame pasveikinti () su vietiniu kintamuoju msg Ir atsispausdinkite. Kadangi MSG egzistuoja tik atliekant funkciją, jis pasiekiamas funkcijoje. Skambinimas pasveikinti () Rodo pranešimą.
2 pavyzdys : Šiame pavyzdyje mes sukuriame vietinį kintamąjį funkcijos viduje ir bandome pasiekti jį už funkcijos ribų, sukeliančios klaidą.
Python
def greet(): msg = 'Hello!' print('Inside function:' msg) greet() print('Outside function:' msg)
Išvestis
„Traceback“ (paskutinis paskutinis skambutis):
Failas '/home/guest/sandbox/solution.py' 6 eilutė
Spausdinti ('išorė funkcija:' msg)
„NameError“: pavadinimas „msg“ nėra apibrėžtas
Paaiškinimas: MSG yra vietinis kintamasis viduje pasveikinti () ir galima ten patekti tik ten. Spausdinus jį išorėje, sukeliama klaida, nes jos nėra visame pasaulyje.
Visuotiniai kintamieji
Pasauliniai kintamieji deklaruojami ne visose funkcijose ir juos galima pasiekti bet kurioje programoje, įskaitant vidines funkcijas.
Šiame pavyzdyje mes sukuriame visuotinį kintamąjį ir pasiekiame jį tiek funkcijos viduje, tiek išorėje.
Pythonmsg = 'Python is awesome!' def display(): print('Inside function:' msg) display() print('Outside function:' msg)
Išvestis
Inside function: Python is awesome! Outside function: Python is awesome!
Paaiškinimas: MSG yra visuotinis kintamasis, prieinamas tiek viduje, tiek išorėje ekranas () funkcija. Skambinimas ekranas () atspausdina pasaulinį msg ir spausdinimas msg Už funkcijos ribų veikia taip, kaip tikėtasi.
Pastaba: Jei kintamasis nerastas funkcijos (vietinės apimties) „Python“ viduje, automatiškai jo ieško visuotinėje srityje. Tačiau jei vietinis kintamasis turi tą patį pavadinimą kaip ir globalus, jis šešėliaus į pasaulinį kintamąjį šios funkcijos viduje.
Vietinių ir globalių kintamųjų naudojimas
Jei kintamasis yra apibrėžtas tiek visame pasaulyje, tiek vietoje tuo pačiu pavadinimu Vietinis kintamasis šešėliai yra pasaulinis kintamasis funkcijos viduje. Vietinio kintamojo pakeitimai neturi įtakos visuotiniam kintamajam, nebent aiškiai paskelbtumėte kintamąjį kaip globalų.
Pythondef fun(): s = 'Me too.' print(s) s = 'I love Geeksforgeeks' fun() print(s)
Išvestis
Me too. I love Geeksforgeeks
Paaiškinimas: Viduje FUN () s yra vietinis kintamasis, nustatytas ir „Aš“. ir atspausdina tą vertę. Už pasaulio ribų s lieka „Aš myliu„ GeeksforGeeks “, todėl spausdinimas s Vėliau parodyta pasaulinė vertė.
Funkcijos viduje keičiant globalius kintamuosius
Pagal numatytuosius nustatymus funkcijos viduje negalima modifikuoti pasaulinio kintamojo, neskelbiant jo kaip globalios. Jei bandysite „Python“ padidins klaidą, nes jis kintamąjį traktuoja kaip vietinį. Norėdami pakeisti pasaulinį kintamąjį, naudokite Visuotinis raktinis žodis .
Be globalos (sukelia klaidą)
Pythondef fun(): s += ' GFG' # Error: Python thinks s is local print(s) s = 'I love GeeksforGeeks' fun()
Išvestis
Neapribotas
Paaiškinimas: „Inside Fun“ () Python daro prielaidą, kad S yra vietinis, nes mes bandome jį modifikuoti. Tačiau prieš šią liniją nėra jokių vietinių S, todėl įvyksta klaida.
Su „Global“ (veikia teisingai)
Pythons = '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)
Išvestis
Python is great! GFG Look for GeeksforGeeks Python Section Look for GeeksforGeeks Python Section
Paaiškinimas:
- Paskelbdamas „Global“ liepia „Python“ naudoti kintamąjį iš pasaulinės apimties.
- Funkcija pirmiausia prideda „GFG“, tada persirengia s.
- Pokyčiai išlieka už funkcijos ribų.
„Global vs Local“ tuo pačiu pavadinimu
Pythona = 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)
Išvestis
global: 1 f(): 1 global: 1 g(): 2 global: 1 h(): 3 global: 3
Paaiškinimas:
- f () spausdina globalią A nepakeisdamas jo.
- G () sukuria vietinį „Let Global One“ nepaliestą.
- H () skelbia kaip globalų ir jį keičia.
Vietinis kintamasis vs globalus kintamasis
| Palyginimo pagrindas | Visuotinis kintamasis | Vietinis kintamasis |
|---|---|---|
| Apibrėžimas | Paskelbtas už funkcijų ribų | Paskelbtas funkcijų viduje |
| Gyvenimas | Sukurta, kai programa prasideda ir sunaikinta, kai ji baigiasi | Sukurta, kai funkcija vadinama ir sunaikinama, kai ji grįš |
| Dalijimasis duomenimis | Dalijamasi visomis funkcijomis | Nėra dalijamasi; egzistuoja tik savo funkcijoje |
| Taikymo sritis | Galima pasiekti bet kurioje programos vietoje | Prieinama tik funkcijos viduje |
| Reikalingi parametrai | Nereikia parametrų perduoti | Gali būti sukurtas per parametrus ar užduotis funkcijos viduje |
| Saugojimas | Valdoma pasaulinėje vardų srityje (ne fiksuota atminties vieta) | Saugoma funkcijos vietinėje vardų srityje („Stack Frame“) |
| Vertė | Pokyčiai daro įtaką visai programai | Pokyčiai yra vietiniai ir neturi įtakos kitoms funkcijoms |