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.
Pythondef 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.
Pythonmsg = '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.
Pythondef 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)
Pythondef 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)
Pythons = '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
Pythona = 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 |