Globālie un vietējie mainīgie Python

Python mainīgajiem ir galvenā loma datu glabāšanā un pārvaldībā. Viņu uzvedība un pieejamība ir atkarīga no tā, kur viņi tiek definēti programmā. Šajā rakstā mēs izpētīsim globālos un vietējos mainīgos, kā tie darbojas, un parastie scenāriji ar piemēriem.

Vietējie mainīgie

Vietējie mainīgie tiek izveidoti funkcijas iekšpusē un pastāv tikai tās izpildes laikā. Viņiem nevar piekļūt no funkcijas ārpuses.

1. piemērs: Šajā kodā mēs veidojam un piekļūstam vietējam mainīgajam funkcijas iekšpusē.

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

Izvade
Hello from inside the function!  

Paskaidrojums: Mēs definējam sveiciens () ar vietējo mainīgo MSG un izdrukājiet to. Tā kā MSG pastāv tikai funkcijas izpildes laikā, tai ir pieejama funkcija. Izsaukšana sveiciens () Parāda ziņojumu.

2. piemērs : Šajā piemērā mēs veidojam vietējo mainīgo funkcijas iekšpusē un pēc tam mēģinām piekļūt tam ārpus funkcijas, kas izraisa kļūdu.

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

Izvade

Traceback (pēdējais zvans pēdējais):
Fails '/home/guest/sandbox/solution.py' līnija 6
drukāt ('ārējā funkcija:' MSG)
NameError: nosaukums “msg” nav definēts

Paskaidrojums: MSG ir vietējais mainīgais iekšpusē sveiciens () un var piekļūt tikai tur. Drukāšana ārpus tās rada kļūdu, jo tā neeksistē visā pasaulē.

Globālie mainīgie

Globālie mainīgie tiek deklarēti ārpus visām funkcijām, un tiem var piekļūt jebkur programmā, ieskaitot iekšējās funkcijas.

Šajā piemērā mēs izveidojam globālu mainīgo un pēc tam piekļūstam tam gan iekšpusē, gan ārpusē.

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

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

Paskaidrojums: MSG ir globāls mainīgais, kas ir pieejams gan iekšpusē, gan ārpusē displejs () funkcija. Izsaukšana displejs () izdrukā globālo MSG un drukāšana MSG Ārpus funkcijas darbojas, kā paredzēts.

Piezīme: Ja mainīgais nav atrodams funkcijas (vietējā darbības jomā) python iekšpusē, to automātiski meklē globālā mērogā. Tomēr, ja vietējam mainīgajam ir tāds pats nosaukums kā globālam, tas šajā funkcijā ēnos globālo mainīgo.

Vietējo un globālo mainīgo izmantošana

Ja mainīgais tiek definēts gan globālā, gan lokāli ar tādu pašu nosaukumu, vietējais mainīgais ēnas ir globālais mainīgais funkcijas iekšpusē. Vietējā mainīgā izmaiņas neietekmē globālo mainīgo, ja vien jūs skaidri nepaziņojat par mainīgo kā globālu.

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

Izvade
Me too. I love Geeksforgeeks  

Paskaidrojums: Iekšpuse jautri () s ir vietējais mainīgais, kas iestatīts arī uz “mani”. un izdrukas, kas vērtē. Ārpus globālās s paliek “es mīlu geeksforgeeks”, tāpēc drukāšana s Pēc tam parāda globālo vērtību.

Globālo mainīgo modificēšana funkcijas iekšpusē

Pēc noklusējuma nevar modificēt globālo mainīgo funkcijā, nepaziņojot to par globālu. Ja jūs mēģināt, Python radīs kļūdu, jo tas mainās kā lokāls. Lai modificētu globālo mainīgo izmantošanu Globālais atslēgvārds Apvidū

Bez globāla (cēloņu kļūda)

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

Izvade

NeboundlocalError: Vietējais mainīgais ', uz kuru atsaucas pirms norīkošanas

Paskaidrojums: Inside Fun () Python pieņem, ka S ir vietējie, jo mēs cenšamies to modificēt. Bet pirms šīs līnijas nav vietējo S, tāpēc rodas kļūda.

Ar globālu (darbojas pareizi)

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  )   

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

Paskaidrojums:

  • Deklarējot S par globālo, Python izmanto mainīgo no globālās darbības jomas.
  • Funkcija vispirms pievieno “GFG”, pēc tam pārnessp.
  • Izmaiņas pastāv ārpus funkcijas.

Globālais vs vietējais ar tādu pašu vārdu

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  )   

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

Paskaidrojums:

  • f () izdrukā globālu a, to nemainot.
  • g () rada vietējo A atstājošu globālu neskartu.
  • h () paziņo par globālu un to modificē.

Vietējais mainīgais salīdzinājumā ar globālo mainīgo

Salīdzināšanas bāze Globālais mainīgais Vietējais mainīgais
Definīcija Deklarēts ārpus funkcijām Deklarēts funkciju iekšpusē
Mūžs Izveidots, kad programma sākas un iznīcina, kad tā beidzas Izveidots, kad funkciju sauc un iznīcina, kad tā atgriežas
Datu apmaiņa Koplieto visās funkcijās Nav dalīts; pastāv tikai tās funkcijas ietvaros
Apjoms Var piekļūt jebkur programmā Piekļuve tikai funkcijas iekšienē
Nepieciešami parametri Nav nepieciešams parametru nodošana Var izveidot, izmantojot parametrus vai uzdevumus funkcijas iekšpusē
Uzglabāšana Pārvaldīts globālajā nosaukumvietā (nav fiksēta atmiņas atrašanās vieta) Glabā funkcijas vietējā nosaukumvietā (kaudzes rāmis)
Novērtēt Izmaiņas ietekmē visu programmu Izmaiņas ir vietējas un neietekmē citas funkcijas