M2 L7 Funkcje – zmienne lokalne a globalne

Funkcje – zmienne lokalne a globalne

W poprzednim przykładzie korzystaliśmy ze zmiennej występującej poza ciałem funkcji i nie będącej parametrem. W sytuacji gdy chcemy tylko odczytać jej wartość, działanie takie będzie zaakceptowane przez Python. Jeśli jednak zechcemy dokonać jej modyfikacji, otrzymamy błąd:

Jeśli w ciele funkcji pojawiają się przypisania do zmiennych, Python (i większość innych języków programowania) potraktuje je jako zmienne lokalne, właściwe tylko dla tej funkcji. Nie mają one nic wspónego z wartością zmiennych występujących poza funkcją, np.

Wydawać by się mogło, że wynikiem działania takiego programu będzie „20” w obu przypadkach – taką wartość ustawiliśmy w funkcji i taka powinna być poza nią. Tymczasem zmienna X w ciele funkcji i na zewnątrz to dwa niezależne od siebie byty. X wewnątrz funkcji jest tzw. zmienną lokalną, aktywną tylko w jej ciele – wszelkie zmiany nie będą odzwierciedlone na zewnątrz, nawet jeśli nazwa zmiennej jest taka sama.

Jeśli chcemy odwołać się do X spoza funkcji, musimy zaznaczyć iż chodzi nam o zmienną globalną, która obejmie swoim zasięgiem cały program, a nie tylko ciało funkcji. Służy do tego słowo kluczowe global użyte wewnątrz funkcji

Wyjątkiem jest tutaj sytuacja, w których w ciele funkcji przypisujemy wartość do konkretnego indeksu listy, np. dzienTygodnia[2]=’środa’. Ponieważ nie tworzymy w ten sposób nowej listy – jak pamiętamy, służyła do tego konstrukcja typu lista=[zmienna1,zmienna2,zmienna3] – to Python traktuje to jako odwołanie do zmiennej zewnętrznej i nie wymaga użycia global.

Bardziej zaawansowani programiści zwykle starają się unikać zmiennych globalnych, gdyż mogą one skutkować szeregiem różnych problemów, szczególnie w bardziej złożonych projektach. Dla tej samej funkcjonalności używa się dodatkowych funkcji odczytujących i przypisujących wartości do zmiennych zewnętrznych. Na potrzeby szkoleniowe używanie global jest jednak zupełnie wystarczające.