PYTHON Zasięg zmiennych
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:
- Zmienna lokalna – zadeklarowana wewnątrz funkcji czy metody
- Zmienna zadeklarowana w metodzie nadrzędnej (w przypadku zagnieżdżenia funkcji)
- Zmienna globalna
- 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