Twoje Centrum Szkoleniowe

Nauczmy się dziś czegoś nowego!

Kurs programowania - Python

PYTHON Zasięg zmiennych

 

W kontekście programowania, jednym z najważniejszych aspektów zarządzania danymi jest zrozumienie zasięgu zmiennych. W języku Python zasięg zmiennych determinuje miejsca, w których dana zmienna jest dostępna i można ją użyć. Celem tego artykułu jest zrozumienie, jak działa zasięg zmiennych w Pythonie, jak różnią się zmienne lokalne od globalnych oraz jak te zasady wpływają na projektowanie i debugowanie kodu.

Zmienne w Pythonie mogą być kategoryzowane w oparciu o ich zasięg, na przykład jako zmienne lokalne (dostępne tylko w określonym bloku kodu lub funkcji) oraz zmienne globalne (dostępne w całym kodzie programu). Koncept ten może wydawać się prosty na pierwszy rzut oka, ale zrozumienie subtelności zasięgu zmiennych jest kluczowe dla efektywnego i bezbłędnego programowania.

W ramach tego artykułu, przyjrzymy się różnym scenariuszom, w których zasięg zmiennych odgrywa kluczową rolę. Zobaczymy, jak zachowują się zmienne wewnątrz funkcji, co się dzieje, gdy mamy zagnieżdżone funkcje, oraz jak można korzystać z zmiennych globalnych i lokalnych w różnych kontekstach.

Przeanalizujemy również hierarchię zasięgów, tzn. kolejność, w której Python szuka zmiennych: od lokalnych, poprzez funkcje nadrzędne, aż do globalnych i wbudowanych. To zrozumienie pomoże w unikaniu powszechnych błędów i pułapek związanych z zarządzaniem zmiennymi.

Ostatecznie, mam nadzieję, że po przeczytaniu tego artykułu, zasięg zmiennych w Pythonie nie będzie dla Ciebie tajemnicą, a wręcz stanie się narzędziem, które pomoże Ci pisać bardziej efektywny i czytelny kod.

 

Przykład:

def fun1():
    x = 7
    print('Wartość x wewnątrz funkcji:',x)
x = 10
fun1()
print('Wartość x poza funkcją:',x)

 

Efekt:

Wartość x wewnątrz funkcji: 7
Wartość x poza funkcją: 10

 

Zmienne posiadają swój zasięg. Jest nim obszar programu, w jakim ich wartość jest możliwa do wykorzystania. I tak zmienne funkcyjne, tworzone wewnątrz funkcji mają zasięg obszaru funkcji, a zmienne globalne mają zasięg całego programu. Zmienne funkcyjne o tej samej nazwie co zmienne globalne na obszarze funkcji mają przed nimi pierwszeństwo.

Jeśli program chce uzyskać wartość zmiennej korzysta z pewnej kolejności ważności zmiennych. Są to kolejno:

  1. Zmienna lokalna – zadeklarowana wewnątrz funkcji czy metody
  2. Zmienna zadeklarowana w metodzie nadrzędnej (w przypadku zagnieżdżenia funkcji)
  3. Zmienna globalna
  4. Zmienna wbudowana

W naszym przykładzie mamy dwie wartości zmiennej x. Pierwsza x = 10 zadeklarowane na początku programu, kolejne x = 7 zadeklarowane wewnątrz funkcji. Nietrudno się domyśleć, że wypisanie wartości x wewnątrz funkcji da wynik 7, natomiast na zewnątrz wynik 10.

Co jednak jeśli wewnątrz funkcji nie zadeklarujemy wartości x, natomiast spróbujemy ją wypisać na ekran?

def fun1():
    print('Wartość x wewnątrz funkcji:',x)
x = 10
fun1()
print('Wartość x poza funkcją:',x)

Efekt:

Wartość x wewnątrz funkcji: 10
Wartość x poza funkcją: 10

 

Program szukał lokalnej wartości x. Nie znalazł jej. W związku z tym przeszedł do poszukiwań w kolejnych obszarach. Wartość x wewnątrz funkcji jest taka sama jak na zewnątrz jej.

Podobnie ma się sprawa wewnątrz zagnieżdżonych funkcji.

def fun1():
    x=5
    print('Wartość x wewnątrz funkcji 1:',x)
    fun2()
def fun2():
    x = 3
    print('Wartość x wewnątrz funkcji 2:',x)
x = 10
fun1()
print('Wartość x poza funkcją:',x)

Efekt:

Wartość x wewnątrz funkcji 1: 5
Wartość x wewnątrz funkcji 2: 3
Wartość x poza funkcją: 10

 

Natomiast jeśli wewnątrz funkcji 2 nie zadeklarujemy wartości zmiennej x:

def fun1():
    def fun2():
        print('Wartość x wewnątrz funkcji 2:',x)
    x=5
    print('Wartość x wewnątrz funkcji 1:',x)
    fun2()
x = 10
fun1()
print('Wartość x poza funkcją:',x)

Efekt:

Wartość x wewnątrz funkcji 1: 5
Wartość x wewnątrz funkcji 2: 5
Wartość x poza funkcją: 10

 

Testy przypięte do lekcji
Aby uzyskać dostęp do testów i ćwiczeń interaktywnych - Zaloguj się
Aby widzieć ocenę lekcji - Zaloguj się