By lukasz September 20, 2021 In Kurs Python'a dla początkujących

Python – bezpłatny kurs dla początkujących #7, Scope

Dalej o funkcjach?

Ostatnio nauczyliśmy się tworzyć funkcje, poznaliśmy ich typy i dowiedzieliśmy się jak przekazywać do niej argumenty, czyli całkiem dużo 🙂

Funkcje, to jednak bardziej rozbudowany temat. Musimy poznać jeszcze kolejny istotny element, który się z nimi wiąże.

Później możemy świętować zostanie mistrzami pisania funkcji 🙂

Scope

W programowaniu mamy ważną zasadę tzw. “Scope” czyli tak na prawdę zasięg, w którym istnieje nasza zmienna – o zmiennych mówiliśmy w poprzednich lekcjach, jeżeli nie pamiętasz to koniecznie tam wróć: Lekcja o zmiennych.

Wyróżniamy:

  • local scope – zasięg lokalny, który ogranicza wszystkie zmienne wewnątrz funkcji, instrukcji warunkowych (na przykład ‘if’) czy pętli.
  • global scope – zasięg globalny, w którym każda funkcja, instrukcja warunkowa, pętla itd. ma dostęp do zmiennej.

Co to oznacza?

To oznacza, że jak zadeklarujemy zmienną w funkcji, instrukcji warunkowej czy pętli, to tylko i wyłącznie tam będzie dostępna.

Jeżeli zadeklarujemy zmienną w scopie globalnym, to wszędzie będzie do niej dostęp.

Z zasięgiem jest jak z Vegas: “Co się stało w Vegas, zostaje w Vegas” tak i u nas: “co się zadeklarowało w scopie funkcji, zostaje w funkcji 😉

Kilka przykładów

Deklarując zmienną globalną deklarujemy ją poza czymkolwiek co mogłoby ją ograniczać. Zwykle znajduje się ona wtedy na samej górze pliku.

# global variable
# available in the whole file
city = 'Warsaw'


def greeting():
    print(f'Hello from {city}')


def warm_greeting():
    print(f'Hi from {city}. How are you?')


greeting()
warm_greeting()

# result:
# Hello from Warsaw
# Hi from Warsaw. How are you?

Zmienna lokalna, nie ma nic wspólnego ze zmienną globalną, mimo że może się tak samo nazywać.

# global variable
# available in the whole file
city = 'Warsaw'


# function creates it's own local scope
def greeting():
    # this is a local variable which is available here
    # it's not related to the global 'city' variable above
    city = 'London'
    print(f'Hello from {city}')


# function creates it's own local scope
def warm_greeting():
    # here we don't have a city variable
    # so it's taken from the global scope
    print(f'Hi from {city}. How are you?')


greeting()
warm_greeting()
# result:
# Hello from London
# Hi from Warsaw. How are you?

Nie mamy dostępu do zmiennych lokalnych poza scopem, w którym zostały zadeklarowane.

# function creates it's own local scope
def greeting():
    # this is a local variable which is available here
    city = 'London'


# outside a function we are in a global scope
# in a global scope there is no 'city' variable
print(city)
# this won't work and you will see ERROR

Ważna uwaga!

Dobrą praktyką programistyczną jest nie deklarować lub deklarować jak najmniej zmiennych w scopie globalnym, ponieważ:

  • jeżeli przypadkiem tą zmienną usuniemy, zmienimy czy nadpiszemy, to każde miejsce, które używało tej zmiennej może nie działać. Później jest niesamowicie ciężko wyłapać gdzie w naszym kodzie wystąpił błąd,
  • chcemy, aby nasz kod był modularny i niezależny – tworząc zmienne globalne uzależniamy nasze funkcje od czegoś co jest poza nią, a nie chcemy być z reguły zależni od niczego.

Jak wszędzie, najważniejszy jest rozsądek, ale zapamiętaj, że jeżeli możesz to unikaj tworzenia zmiennych globalnych.

Wiesz już coraz więcej i właśnie udało Ci się poznać kolejny ważny koncept! Będziesz w stanie lepiej organizować swój kod i rozumieć co się w niej dzieje! Gratulacje! 🙂

Nie zapomnij polubić stronę na facebooku i zapisać się do newsletter’a aby dostać informację o kolejnych świetnych lekcjach!

Leave a reply

en_USEnglish