Globálne a miestne premenné v Pythone
V premenných Python zohrávajú kľúčovú úlohu pri ukladaní a správe údajov. Ich správanie a dostupnosť závisia od toho, kde sú definované v programe. V tomto článku preskúmame globálne a miestne premenné, ako fungujú a bežné scenáre s príkladmi.
Miestne premenné
Miestne premenné sa vytvárajú vo vnútri funkcie a existujú iba počas jej vykonávania. Nemožno k nim pristupovať zvonku funkcie.
Príklad 1: V tomto kóde vytvárame a pristupujeme k miestnej premennej vo funkcii.
Python def greet (): msg = 'Hello from inside the function!' print ( msg ) greet ()
Výstup
Hello from inside the function!
Vysvetlenie: Definujeme pozdrav () s lokálnou premennou MSG a vytlačte to. Pretože MSG existuje iba počas vykonávania funkcie, je prístupná v rámci funkcie. Volanie pozdrav () Zobrazí správu.
Príklad 2 : V tomto príklade vytvárame vo funkcii lokálnu premennú a potom sa k nej snažíme získať prístup mimo funkcie, ktorá spôsobuje chybu.
Python def greet (): msg = 'Hello!' print ( 'Inside function:' msg ) greet () print ( 'Outside function:' msg )
Výstup
TraceBack (posledný hovor posledný):
Súbor '/home/guest/sandbox/solution.py' riadok 6 v
tlač ('vonkajšia funkcia:' msg)
NameError: meno „msg“ nie je definované
Vysvetlenie: MSG je miestna premenná vo vnútri pozdrav () a je tu prístup iba tam. Tlač vonku spôsobuje chybu, pretože neexistuje celosvetovo.
Globálne premenné
Globálne premenné sú deklarované mimo všetkých funkcií a sú k nim prístup kdekoľvek v programe vrátane vnútorných funkcií.
V tomto príklade vytvárame globálnu premennú a potom k nej pristupujeme vo vnútri aj mimo funkcie.
Python msg = 'Python is awesome!' def display (): print ( 'Inside function:' msg ) display () print ( 'Outside function:' msg )
Výstup
Inside function: Python is awesome! Outside function: Python is awesome!
Vysvetlenie: MSG je globálna premenná prístupná vo vnútri aj mimo displej () funkcia. Volanie displej () Vytlačí globálne MSG a tlač MSG Mimo funkcie funguje podľa očakávania.
Poznámka: Ak sa premenná nenájde vo vnútri funkcie (miestneho rozsahu) Python, automaticky ju vyhľadá v globálnom rozsahu. Ak však miestna premenná má rovnaké meno ako globálny, zatieni globálnu premennú do tejto funkcie.
Použitie miestnych a globálnych premenných
Ak je premenná definovaná globálne aj lokálne s rovnakým názvom, miestna premenná tiene globálna premenná vo vnútri funkcie. Zmeny v miestnej premennej neovplyvňujú globálnu premennú, pokiaľ túto premennú výslovne nedôverujete ako globálnu.
Python def fun (): s = 'Me too.' print ( s ) s = 'I love Geeksforgeeks' fun () print ( s )
Výstup
Me too. I love Geeksforgeeks
Vysvetlenie: Vo vnútri zábava () siež je miestna premenná nastavená na „ja“. a vytlačí túto hodnotu. Mimo globálneho siež Zostáva „milujem geeksforgeeks“, takže tlač siež Potom ukazuje globálnu hodnotu.
Modifikácia globálnych premenných vo funkcii
V predvolenom nastavení nie je možné upraviť globálnu premennú vo funkcii bez toho, aby ju deklarovala ako globálnu. Ak vyskúšate, Python vyvolá chybu, pretože s premennou považuje miestnu. Upraviť globálnu premennú používať globálne kľúčové slovo .
Bez globálneho (spôsobuje chybu)
Python def fun (): s += ' GFG' # Error: Python thinks s is local print ( s ) s = 'I love GeeksforGeeks' fun ()
Výstup
UnboundloCalerror: Local Premenná 's' odkazom na predradenie
Vysvetlenie: Inside Fun () Python predpokladá, že S je miestny, pretože sa ho snažíme upraviť. Ale pred týmto riadkom neexistuje žiadne miestne S, takže dôjde k chybe.
S globálnym (správne funguje)
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 )
Výstup
Python is great! GFG Look for GeeksforGeeks Python Section Look for GeeksforGeeks Python Section
Vysvetlenie:
- Vyhlásenie S ako Global hovorí Pythonovi, aby použil premennú z globálneho rozsahu.
- Funkcia najprv pripojí „GFG“ a potom ressigns s.
- Zmeny pretrvávajú mimo funkcie.
Global vs Local s rovnakým názvom
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 )
Výstup
global: 1 f(): 1 global: 1 g(): 2 global: 1 h(): 3 global: 3
Vysvetlenie:
- f () tlačí globálne A bez toho, aby to zmenilo.
- G () vytvára miestny a opúšťajúci globálny človek nedotknutý.
- H () vyhlasuje ako globálny a upravuje ho.
Lokálna premenná verzus globálna premenná
| Porovnávacia základňa | Globálna premenná | Miestna premenná |
|---|---|---|
| Definícia | Vyhlásené mimo funkcií | Vyhlásené vo funkciách |
| Celoživotný | Vytvorené, keď program začne a zničí, keď končí | Vytvorené, keď sa funkcia volá a zničí, keď sa vráti |
| Zdieľanie údajov | Zdieľané vo všetkých funkciách | Nezdieľané; existuje iba v rámci svojej funkcie |
| Rozsah | Je prístupný kdekoľvek v programe | Prístupné iba vo vnútri funkcie |
| Potrebné parametre | Nie je potrebné prejsť žiadny parameter | Sa môže vytvárať prostredníctvom parametrov alebo priradení vo vnútri funkcie |
| Ukladanie | Spravované v globálnom mennom priestore (nie pevne umiestnenie pamäte) | Uložené v miestnom mennom priestore funkcie (rám Stack) |
| Hodnota | Zmeny ovplyvňujú celý program | Zmeny sú miestne a neovplyvňujú iné funkcie |