logo

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.

log4j

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
DefinicjaZadeklarowane poza funkcjamiZadeklarowane wewnątrz funkcji
ŻycieTworzone podczas uruchamiania programu i niszczone po jego zakończeniuTworzony w momencie wywołania funkcji i niszczony w momencie jej powrotu
Udostępnianie danychUdostępnione we wszystkich funkcjachNieudostępnione; istnieje tylko w ramach swojej funkcji
ZakresMożna uzyskać do nich dostęp w dowolnym miejscu programuDostępne tylko wewnątrz funkcji
Potrzebne parametryNie ma potrzeby przekazywania parametrówMożna je utworzyć za pomocą parametrów lub przypisań wewnątrz funkcji
SkładowanieZarzą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 programuZmiany mają charakter lokalny i nie wpływają na inne funkcje