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