Globale og lokale variabler i Python

I Python -variabler spiller en nøglerolle i lagring og styring af data. Deres opførsel og tilgængelighed afhænger af, hvor de er defineret i programmet. I denne artikel vil vi udforske globale og lokale variabler, hvordan de fungerer og almindelige scenarier med eksempler.

Lokale variabler

Lokale variabler oprettes inde i en funktion og findes kun under dens udførelse. De kan ikke fås adgang uden for funktionen.

Eksempel 1: I denne kode opretter vi og får adgang til en lokal variabel inde i en funktion.

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

Produktion
Hello from inside the function!  

Forklaring: Vi definerer hilse() med en lokal variabel MSG og udskrive det. Da MSG kun eksisterer under funktionens udførelse, har den adgang til inden for funktionen. Ringer hilse() Viser beskeden.

Eksempel 2 : I dette eksempel opretter vi en lokal variabel inde i en funktion og prøver derefter at få adgang til den uden for funktionen, der forårsager en fejl.

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

Produktion

Traceback (seneste opkald sidst):
Fil '/home/guest/sandbox/solution.py' linje 6 i
Print ('Udenfor funktion:' MSG)
NameError: Navn 'MSG' er ikke defineret

Forklaring: MSG er en lokal variabel indeni hilse() og kan kun fås der. Udskrivning af det udenfor forårsager en fejl, fordi den ikke findes globalt.

Globale variabler

Globale variabler erklæres uden for alle funktioner og kan fås adgang til hvor som helst i programmet inklusive indvendige funktioner.

I dette eksempel opretter vi en global variabel og får derefter adgang til den både i og uden for en funktion.

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

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

Forklaring: MSG er en global variabel tilgængelig både i og uden for vise() fungere. Ringer vise() Udskriver det globale MSG og udskrivning MSG Uden for funktionen fungerer som forventet.

Note: Hvis en variabel ikke findes i en funktion (lokalt omfang), ser Python automatisk efter den i det globale omfang. Men hvis en lokal variabel har samme navn som en global, vil den skygge den globale variabel inde i denne funktion.

Brug af lokale og globale variabler

Hvis en variabel defineres både globalt og lokalt med samme navn den lokale variabel skygger den globale variabel inde i funktionen. Ændringer i den lokale variabel påvirker ikke den globale variabel, medmindre du eksplicit erklærer variablen som global.

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

Produktion
Me too. I love Geeksforgeeks  

Forklaring: Indenfor sjov() s er en lokal variabel indstillet til 'mig også.' og udskriver den værdi. Uden for det globale s forbliver 'Jeg elsker Geeksforgeeks' så udskrivning s Bagefter viser den globale værdi.

Ændring af globale variabler inde i en funktion

Som standard kan man ikke ændre en global variabel inde i en funktion uden at erklære den som global. Hvis du prøver Python, hæver en fejl, fordi den behandler variabel som lokal. For at ændre en global variabel skal du bruge Globalt nøgleord .

Uden global (forårsager fejl)

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

Produktion

UnboundLocalerror: Lokal variabel 's' henvist til før tildeling

Forklaring: Inside Fun () Python antager, at S er lokalt, da vi prøver at ændre det. Men der findes ingen lokale s før denne linje, så der opstår en fejl.

Med global (fungerer korrekt)

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  )   

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

Forklaring:

  • At erklære S som Global fortæller Python om at bruge variablen fra det globale omfang.
  • Funktionen tilføjer først 'gfg' og tildeler derefter s.
  • Ændringer fortsætter uden for funktionen.

Global vs lokalt med samme navn

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  )   

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

Forklaring:

  • f () udskriver global a uden at ændre det.
  • g () skaber en lokal A, der forlader global uberørt.
  • h () erklærer en som global og ændrer den.

Lokal variabel vs global variabel

Sammenligningsbasis Global variabel Lokal variabel
Definition Erklæret uden for funktionerne Erklæret inde i en funktion
Levetid Oprettet, når programmet starter og ødelagde, når det slutter Oprettet, når funktionen kaldes og ødelægges, når den vender tilbage
Datadeling Delt på tværs af alle funktioner Ikke delt; eksisterer kun inden for dens funktion
Omfang Kan fås adgang overalt i programmet Tilgængelig kun inde i funktionen
De nødvendige parametre Ingen parameter, der passerer Kan oprettes gennem parametre eller opgaver inde i funktionen
Opbevaring Administreret i det globale navneområde (ikke fast hukommelsesplacering) Gemt i funktionens lokale navneområde (stakramme)
Værdi Ændringer påvirker hele programmet Ændringer er lokale og påvirker ikke andre funktioner