Zmienne globalne i lokalne w Pythonie

W Pythonie zmienne odgrywają kluczową rolę w przechowywaniu danych i zarządzaniu nimi. Ich zachowanie i dostępność zależą od tego, gdzie są zdefiniowane w programie. W tym artykule omówimy działanie zmiennych globalnych i lokalnych oraz typowe scenariusze z przykładami.

Zmienne lokalne

Zmienne lokalne tworzone są wewnątrz funkcji i istnieją tylko podczas jej wykonywania. Nie można uzyskać do nich dostępu spoza funkcji.

Przykład 1: W tym kodzie tworzymy zmienną lokalną wewnątrz funkcji i uzyskujemy do niej dostęp.

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

Wyjście
Hello from inside the function!  

Wyjaśnienie: Definiujemy powitać() ze zmienną lokalną wiadomość i wydrukuj go. Ponieważ msg istnieje tylko podczas wykonywania funkcji, można uzyskać do niego dostęp w ramach funkcji. Powołanie powitać() wyświetla komunikat.

Przykład 2 : W tym przykładzie tworzymy zmienną lokalną wewnątrz funkcji, a następnie próbujemy uzyskać do niej dostęp poza funkcją, co powoduje błąd.

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

Wyjście

Traceback (ostatnie połączenie ostatnie):
Plik „/home/guest/sandbox/Solution.py” wiersz 6 cali
print('Funkcja zewnętrzna:' msg)
NameError: nazwa „msg” nie jest zdefiniowana

Wyjaśnienie: wiadomość jest zmienną lokalną wewnątrz powitać() i tylko tam można do nich dotrzeć. Drukowanie go na zewnątrz powoduje błąd, ponieważ nie istnieje globalnie.

Zmienne globalne

Zmienne globalne są deklarowane poza wszystkimi funkcjami i można uzyskać do nich dostęp w dowolnym miejscu programu, łącznie z funkcjami wewnętrznymi.

W tym przykładzie tworzymy zmienną globalną, a następnie uzyskujemy do niej dostęp zarówno wewnątrz, jak i na zewnątrz funkcji.

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

Wyjście
Inside function: Python is awesome! Outside function: Python is awesome!  

Wyjaśnienie: wiadomość jest zmienną globalną dostępną zarówno wewnątrz, jak i na zewnątrz wyświetlacz() funkcjonować. Powołanie wyświetlacz() drukuje plik global wiadomość i drukowanie wiadomość poza funkcją działa zgodnie z oczekiwaniami.

Notatka: Jeśli zmienna nie zostanie znaleziona wewnątrz funkcji (zasięg lokalny), Python automatycznie szuka jej w zasięgu globalnym. Jeśli jednak zmienna lokalna ma taką samą nazwę jak zmienna globalna, będzie ona cieniem zmiennej globalnej wewnątrz tej funkcji.

Wykorzystanie zmiennych lokalnych i globalnych

Jeśli zmienna jest zdefiniowana zarówno globalnie, jak i lokalnie o tej samej nazwie, zmienna lokalna przesłania zmienną globalną wewnątrz funkcji. Zmiany zmiennej lokalnej nie mają wpływu na zmienną globalną, chyba że jawnie zadeklarujesz zmienną jako globalną.

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

Wyjście
Me too. I love Geeksforgeeks  

Wyjaśnienie: Wewnątrz zabawa() S to zmienna lokalna ustawiona na „Ja też”. i drukuje tę wartość. Poza globalem S pozostaje drukowanie „Kocham Geeksforgeeks”. S następnie pokazuje wartość globalną.

Modyfikowanie zmiennych globalnych wewnątrz funkcji

Domyślnie nie można modyfikować zmiennej globalnej wewnątrz funkcji bez zadeklarowania jej jako globalnej. Jeśli spróbujesz, Python zgłosi błąd, ponieważ traktuje zmienną jako lokalną. Aby zmodyfikować zmienną globalną, użyj metody globalne słowo kluczowe .

Bez globalnego (powoduje błąd)

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

Wyjście

UnboundLocalError: zmienna lokalna „s”, do której odwołuje się przed przypisaniem

Wyjaśnienie: Wewnątrz fun() Python zakłada, że ​​s jest lokalne, ponieważ próbujemy je zmodyfikować. Ale przed tą linią nie ma żadnego lokalnego s, więc pojawia się błąd.

Z globalem (działa poprawnie)

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  )   

Wyjście
Python is great! GFG Look for GeeksforGeeks Python Section Look for GeeksforGeeks Python Section  

Wyjaśnienie:

  • Deklarowanie s jako global mówi Pythonowi, aby użył zmiennej z zakresu globalnego.
  • Funkcja najpierw dołącza „GFG”, a następnie ponownie przypisuje s.
  • Zmiany pozostają poza funkcją.

Globalny vs lokalny o tej samej nazwie

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  )   

Wyjście
global: 1 f(): 1 global: 1 g(): 2 global: 1 h(): 3 global: 3  

Wyjaśnienie:

  • f() wypisuje globalne a bez zmiany go.
  • g() tworzy lokalną, pozostawiając globalną nietkniętą.
  • h() deklaruje a jako globalne i modyfikuje je.

Zmienna lokalna a zmienna globalna

Podstawa porównania Zmienna globalna Zmienna lokalna
Definicja Zadeklarowane poza funkcjami Zadeklarowane wewnątrz funkcji
Życie Tworzone podczas uruchamiania programu i niszczone po jego zakończeniu Tworzony w momencie wywołania funkcji i niszczony w momencie jej powrotu
Udostępnianie danych Udostępnione we wszystkich funkcjach Nieudostępnione; istnieje tylko w ramach swojej funkcji
Zakres Można uzyskać do nich dostęp w dowolnym miejscu programu Dostępne tylko wewnątrz funkcji
Potrzebne parametry Nie ma potrzeby przekazywania parametrów Można je utworzyć za pomocą parametrów lub przypisań wewnątrz funkcji
Składowanie Zarządzane w globalnej przestrzeni nazw (nie w stałej lokalizacji pamięci) Przechowywane w lokalnej przestrzeni nazw funkcji (ramka stosu)
Wartość Zmiany dotyczą całego programu Zmiany mają charakter lokalny i nie wpływają na inne funkcje