logo

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.

pelastaa

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 ulkopuolellaIlmoitettu toimintojen sisällä
ElinikäinenLuotu, kun ohjelma alkaa ja tuhoutui, kun se päättyyLuotu, kun funktio kutsutaan ja tuhoutuu, kun se palaa
Tietojen jakaminenJaettu kaikissa toiminnoissaEi jaettu; on vain sen toiminnassa
LaajuusVoi käyttää missä tahansa ohjelmassaPääsee vain toiminnon sisällä
Tarvittavat parametritParametrien ohittamista ei tarvitaVoidaan luoda parametrien tai tehtävien kautta toiminnon sisällä
Säilytys-Hallitaan globaalissa nimitilassa (ei kiinteä muistin sijainti)Tallennettu toiminnon paikalliseen nimitilaan (pinokehys)
ArvoMuutokset vaikuttavat koko ohjelmaanMuutokset ovat paikallisia eivätkä vaikuta muihin toimintoihin