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