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.

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ėž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