logo

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.



ahoj svet java

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íciaVyhlá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 údajovZdieľané vo všetkých funkciáchNezdieľané; existuje iba v rámci svojej funkcie
RozsahJe prístupný kdekoľvek v programePrístupné iba vo vnútri funkcie
Potrebné parametreNie je potrebné prejsť žiadny parameterSa môže vytvárať prostredníctvom parametrov alebo priradení vo vnútri funkcie
UkladanieSpravované v globálnom mennom priestore (nie pevne umiestnenie pamäte)Uložené v miestnom mennom priestore funkcie (rám Stack)
HodnotaZmeny ovplyvňujú celý programZmeny sú miestne a neovplyvňujú iné funkcie