logo

Pasauliniai ir vietiniai kintamieji Python

„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.

Python
def 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.

Python
msg = '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ų.

Python
def 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ą)

Python
def 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)

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) 

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

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) 

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ėžimasPaskelbtas už funkcijų ribųPaskelbtas funkcijų viduje
GyvenimasSukurta, kai programa prasideda ir sunaikinta, kai ji baigiasiSukurta, kai funkcija vadinama ir sunaikinama, kai ji grįš
Dalijimasis duomenimisDalijamasi visomis funkcijomisNėra dalijamasi; egzistuoja tik savo funkcijoje
Taikymo sritisGalima pasiekti bet kurioje programos vietojePrieinama tik funkcijos viduje
Reikalingi parametraiNereikia parametrų perduotiGali būti sukurtas per parametrus ar užduotis funkcijos viduje
SaugojimasValdoma pasaulinėje vardų srityje (ne fiksuota atminties vieta)Saugoma funkcijos vietinėje vardų srityje („Stack Frame“)
VertėPokyčiai daro įtaką visai programaiPokyčiai yra vietiniai ir neturi įtakos kitoms funkcijoms