Funkcje: def i return – własny fragment kodu z własną nazwą
Materiały tej lekcji są na razie tylko do czytania na stronie. Kod przepisz albo skopiuj do swojego edytora.
Czego się nauczysz
print, len, sum, range – to wszystko są funkcje i używasz ich od pierwszej lekcji. Teraz nauczysz się pisać własne. To ważny krok: klasa, którą będziesz pisać na egzaminie, składa się z metod, a metoda to funkcja mieszkająca w klasie.
Po tej lekcji:
- napiszesz własną funkcję i ją wywołasz,
- wyjaśnisz różnicę między definicją a wywołaniem,
- zwrócisz wynik instrukcją
returni użyjesz go dalej, - będziesz wiedzieć, co zwraca funkcja bez
return.
Po co własne funkcje
- Nie powtarzasz tego samego kodu w kilku miejscach.
- Poprawka w jednym miejscu naprawia wszystkie wywołania naraz.
- Kod da się przetestować – a to na egzaminie osobno punktowana część.
Budowa funkcji
def przywitaj():
print("Czesc!")
print("Milego dnia")
przywitaj()
przywitaj()
Definicja i wywołanie to dwie różne rzeczy. Blok def sam z siebie niczego nie wykonuje – opisuje tylko, co ma się dziać. Funkcję uruchamiasz dopiero, pisząc jej nazwę z nawiasem.
- Po nazwie zawsze stoi nawias – nawet gdy funkcja nie przyjmuje żadnych danych.
- Na końcu linii
defstoi dwukropek, a zawartość funkcji jest wcięta. - Nazwa powinna być czasownikiem opisującym działanie:
przywitaj,policz_srednia. - Definicja musi znaleźć się w programie przed pierwszym wywołaniem. Python czyta plik od góry do dołu.
return – funkcja oddaje wynik
Bez return funkcja tylko coś robi. Z return – coś daje.
def dodaj(a, b):
return a + b
wynik = dodaj(2, 3)
print(wynik) # 5
print(wynik * 10) # 50
print(dodaj(7, 8)) # 15
Instrukcja return kończy działanie funkcji i przekazuje wartość w miejsce, z którego funkcja została wywołana. Tę wartość możesz zapisać do zmiennej, wypisać albo użyć w obliczeniu.
- Kod stojący po instrukcji
returnnigdy się nie wykona. - Funkcja może mieć kilka instrukcji
returnw różnych gałęziach warunku.
return kontra print – najważniejsza różnica w tym roku
print pokazuje. return oddaje.
printwypisuje coś na ekran i na tym kończy. Wartość nigdzie nie zostaje.returnprzekazuje wartość dalej. Można ją zapisać, policzyć, porównać w teście.
def dodaj_zle(a, b):
print(a + b)
def dodaj_dobrze(a, b):
return a + b
x = dodaj_zle(2, 3) # na ekranie: 5
print(x) # None – pusto!
y = dodaj_dobrze(2, 3)
print(y * 10) # 50
Obie funkcje „pokażą” piątkę. Ale tylko druga daje wynik, którego można użyć dalej.
Funkcja bez return zwraca None
To nie jest błąd i program się nie wywali. Po prostu w zmiennej wyląduje None – a problem ujawni się dopiero kilka linii dalej, w zupełnie innym miejscu.
Zasada na cały rok: funkcja liczy i zwraca. Wypisywanie to zadanie programu głównego, nie funkcji.
Dlaczego to takie ważne? Testy jednostkowe porównują wynik funkcji z oczekiwaną wartością. Funkcji, która tylko wypisuje, nie da się przetestować.
Spróbuj sam
W kodzie z lekcji znajdź funkcje dodaj_print i dodaj_return. Uruchom program i zobacz, co trafiło do zmiennych x i y. Potem zmień dodaj_print tak, żeby zwracała wynik.
Zadania z lekcji:
- Napisz funkcję
przywitaj, która wypisuje trzy linie powitania. Wywołaj ją dwa razy. - Napisz funkcję
dodaj(a, b), która zwraca sumę. Wypisz wynik dodawania oraz wynik pomnożony przez 10. - Napisz funkcję
srednia(lista), która zwraca średnią z listy liczb. Przetestuj ją na liście[4, 8, 15, 16, 23, 42]. - Napisz dwie wersje funkcji liczącej pole prostokąta: jedną z
print, drugą zreturn. Spróbuj pomnożyć wynik każdej przez 2 i zapisz w komentarzu, co się stało.
W zadaniach 2, 3 i 4 funkcja musi kończyć się instrukcją return.
Sprawdź się
- Napiszę własną funkcję i ją wywołam.
- Wyjaśnię różnicę między definicją a wywołaniem.
- Zwrócę wynik instrukcją
returni użyję go dalej. - Wiem, co zwraca funkcja bez
return.
Na następnej lekcji: parametry funkcji i wartości domyślne. Ta sama funkcja zacznie działać na różnych danych.
Notatki
Prezentacja
Kod
Otwórz kod, zmieniaj go i uruchamiaj na stronie – np. usuń # z linii oznaczonej jako błąd i zobacz, co się stanie. „Przywróć” wraca do wersji z lekcji.