Globaalit ja paikalliset muuttujat Pythonissa

Python -muuttujilla on avainrooli tietojen tallentamisessa ja hallinnassa. Heidän käyttäytymisensä ja saavutettavuutensa riippuvat siitä, missä ne on määritelty ohjelmassa. Tässä artikkelissa tutkimme globaaleja ja paikallisia muuttujia niiden toiminnan ja yhteisten skenaarioiden kanssa esimerkeillä.

Paikalliset muuttujat

Paikalliset muuttujat luodaan funktion sisällä ja olemassa vain sen suorituksen aikana. Niihin ei voida käyttää toiminnon ulkopuolelta.

Esimerkki 1: Tässä koodissa luomme ja käytämme paikallista muuttujaa toiminnon sisällä.

Python
   def   greet  ():   msg   =   'Hello from inside the function!'   print  (  msg  )   greet  ()   

Tulos
Hello from inside the function!  

Selitys: Määrittelemme tervehtiä() paikallisella muuttujalla msg ja tulosta se. Koska MSG on olemassa vain funktion suorituksen aikana, se pääsee funktion sisällä. Soittaminen tervehtiä() Näyttää viestin.

Esimerkki 2 : Tässä esimerkissä luomme paikallisen muuttujan toiminnon sisään ja yritämme sitten käyttää sitä virheen aiheuttaman toiminnon ulkopuolelle.

Python
   def   greet  ():   msg   =   'Hello!'   print  (  'Inside function:'     msg  )   greet  ()   print  (  'Outside function:'     msg  )   

Tulos

Traceback (viimeisin puhelu viimeinen):
Tiedosto '/home/guest/sandbox/solution.py' rivi 6
Tulosta ('Ulkopuolinen toiminto:' MSG)
NimiError: Nimeä 'msg' ei ole määritelty

Selitys: MSG on paikallinen muuttuja sisällä tervehtiä() ja siihen pääsee vain sinne. Sen ulkopuolella tulostaminen aiheuttaa virheen, koska sitä ei ole maailmanlaajuisesti.

Globaalit muuttujat

Globaalit muuttujat julistetaan kaikkien toimintojen ulkopuolella, ja niihin pääsee mihin tahansa ohjelmaan, mukaan lukien sisätoiminnot.

Tässä esimerkissä luomme globaalin muuttujan ja pääsemme siihen sitten sekä toiminnon sisällä että sen ulkopuolella.

Python
   msg   =   'Python is awesome!'   def   display  ():   print  (  'Inside function:'     msg  )   display  ()   print  (  'Outside function:'     msg  )   

Tulos
Inside function: Python is awesome! Outside function: Python is awesome!  

Selitys: MSG on maailmanlaajuinen muuttuja, joka on saatavana sekä näyttö() toiminto. Soittaminen näyttö() tulostaa globaalin msg ja tulostaminen msg Toiminnon ulkopuolella toimii odotetusti.

Huomaa: Jos muuttujaa ei löydy toiminnon (paikallisen laajuuden) sisällä, Python etsii sitä automaattisesti globaalista laajuudesta. Jos paikallisella muuttujalla on sama nimi kuin globaali, se varjostaa globaalin muuttujan kyseisen toiminnon sisällä.

Paikallisten ja globaalien muuttujien käyttö

Jos muuttuja määritetään sekä globaalisti että paikallisesti samalla nimellä, paikallinen muuttuja varjostaa globaalin muuttujan toiminnon sisällä. Paikallisen muuttujan muutokset eivät vaikuta globaaliin muuttujaan, ellet nimenomaisesti julista muuttujaa globaaliksi.

Python
   def   fun  ():   s   =   'Me too.'   print  (  s  )   s   =   'I love Geeksforgeeks'   fun  ()   print  (  s  )   

Tulos
Me too. I love Geeksforgeeks  

Selitys: Sisällä Hauska () s on paikallinen muuttuja, joka on myös "minä". ja tulostaa tämän arvon. Globaalin ulkopuolella s pysyy "rakastan geeksforgeeks" niin tulostamista s Myöhemmin näyttää globaalin arvon.

Globaalien muuttujien muuttaminen toiminnon sisällä

Oletusarvoisesti ei voida muokata globaalia muuttujaa funktion sisällä julistamatta sitä globaaliksi. Jos yrität Pythonia, nostat virheen, koska se kohtelee muuttujaa paikallisena. Globaalin muuttujan muokkaaminen globaali avainsana .

Ilman globaalia (aiheuttaa virheitä)

Python
   def   fun  ():   s   +=   ' GFG'   # Error: Python thinks s is local   print  (  s  )   s   =   'I love GeeksforGeeks'   fun  ()   

Tulos

UnboundLocalError: Paikallinen muuttujan viitattu ennen tehtävää

Selitys: Inside Fun () Python olettaa, että s on paikallinen, koska yritämme muokata sitä. Mutta paikallisia s ei ole ennen tätä linjaa, joten virhe tapahtuu.

Globaalilla (toimii oikein)

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  )   

Tulos
Python is great! GFG Look for GeeksforGeeks Python Section Look for GeeksforGeeks Python Section  

Selitys:

  • S: n julistaminen globaaliksi käskee Pythonia käyttämään muuttujaa globaalista laajuudesta.
  • Toiminto liittää ensin 'GFG' sitten uudelleen.
  • Muutokset pysyvät toiminnon ulkopuolella.

Globaali vs. paikallinen samalla nimellä

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  )   

Tulos
global: 1 f(): 1 global: 1 g(): 2 global: 1 h(): 3 global: 3  

Selitys:

  • f () tulostaa globaalin A muuttamatta sitä.
  • G () luo paikallisen, joka jättää globaalin, koskematon.
  • H () julistaa a globaalin ja muuttaa sitä.

Paikallinen muuttuja vs. globaali muuttuja

Vertailuperuste Globaali muuttuja Paikallinen muuttuja
Määritelmä Ilmoitettu toimintojen ulkopuolella Ilmoitettu toimintojen sisällä
Elinikäinen Luotu, kun ohjelma alkaa ja tuhoutui, kun se päättyy Luotu, kun funktio kutsutaan ja tuhoutuu, kun se palaa
Tietojen jakaminen Jaettu kaikissa toiminnoissa Ei jaettu; on vain sen toiminnassa
Laajuus Voi käyttää missä tahansa ohjelmassa Pääsee vain toiminnon sisällä
Tarvittavat parametrit Parametrien ohittamista ei tarvita Voidaan luoda parametrien tai tehtävien kautta toiminnon sisällä
Säilytys- Hallitaan globaalissa nimitilassa (ei kiinteä muistin sijainti) Tallennettu toiminnon paikalliseen nimitilaan (pinokehys)
Arvo Muutokset vaikuttavat koko ohjelmaan Muutokset ovat paikallisia eivätkä vaikuta muihin toimintoihin