W tym rozdziale:
- nauczysz się definiować funkcje.
Dotychczas dowiedzieliśmy się czym jest string, integer i float, oraz jak używać zmiennych do przechowywania wartości pomiędzy operacjami. Dzięki temu możemy napisać program, który wykona jakieś operacje na danych, na przykład przetworzy tekst, lub coś obliczy, a następnie wypisze wynik na ekran. Im bardziej zaawansowane problemy będziemy chcieli rozwiązać naszym programem, tym bardziej skomplikowany będzie jego kod.
Jednym ze sposobów na pisanie bardziej zrozumiałego kodu jest definiowanie funkcji. Funkcja to wydzielony zbiór instrukcji, który możemy wielokrotnie wykonać w programie. Definicja funkcji to sposób w jaki opisujemy, które operacje mają być zawarte w funkcji.
Przykładowo, poniższa funkcja zwraca liczbę podniesioną do kwadratu:
def kwadrat(liczba):
wynik = liczba ** 2
return wynik
Linijka zaczynająca się od słowa def
to nagłówek funkcji. Składa się
z następujących elementów:
- słowo
def
, - nazwa funkcji (w tym przykładzie to
kwadrat
), - lista argumentów ujęta w nawiasy okrągłe (tutaj mamy jeden argument
liczba
, ale możemy ich podać wiele, oddzielając je przecinkami), - dwukropek.
Zwróć uwagę na spacje! W całym nagłówku odstęp jest tylko między słowem
def
a nazwą funkcji. Gdyby funkcja miała wiele argumentów oddzielonych
przecinkami, to moglibyśmy wstawić spacje obok przecinków, aby poprawić
czytelność kodu. Poza tymi dwoma przypadkami, w nagłówku nie powinno więcej
spacji.
W kolejnych linijkach po nagłówku mamy ciało funkcji. Są to po prostu
instrukcje, które zostaną wykonane kiedy użyjemy funkcji. W powyższym
przykładzie ciało zawiera dwie operacje: podniesienie do kwadratu wartości
zmiennej liczba
i przypisanie jej do zmiennej wynik
, oraz zwrócenie
wartości zmiennej wynik
. Zwrócenie to określenie jaka wartość ma
być wynikiem danej funkcji. Służy do tego słowo return
. Jeżeli wpiszemy
po nim nazwę zmiennej, to jej wartość będzie wynikiem. Możemy także
zwrócić rezultat nie przypisując do wcześniej do zmiennej:
def kwadrat(liczba):
return liczba ** 2
Zanim zdefiniujesz swoją pierwszą funkcję, zatrzymajmy się na chwilę. Jak dotąd wszystkie operacje wykonywaliśmy w trybie interaktywnym, gdzie wpisywaliśmy kod, wciskaliśmy Enter i dostawaliśmy wynik. Gdy zaczniemy pracować z funkcjami takie podejście może okazać się uciążliwe. Dużo wygodniej będzie teraz przejść do edytora.
Od tej pory każdy przykład, który nie będzie zaczynał się od >>>
należy
rozumieć jako kod wpisany w edytorze i uruchomiony przyciskiem "run".
Przepisz teraz do edytora kod funkcji zapisany poniżej. Zwróć szczególną uwagę na wcięcia. Każda linijka ciała funkcji musi zaczynać się od wcięcia. Co istotne, wszystkie te wcięcia muszą mieć taką samą szerokość. Oznacza to, że jeżeli w pierwszej linijce zrobisz wcięcie na dwie spacje, to wszystkie pozostałe linijki aż do końca funkcji też muszą mieć wcięcie na dwie spacje. Jak zauważysz, edytor sam zrobi wcięcie kiedy po wpisaniu nagłówka wciśniesz Enter. Jeżeli by tego nie zrobił, wtedy najłatwiej jest robić wcięcia klawiszem Tab.
def kwadrat(liczba):
wynik = liczba ** 2
return wynik
Wciśnij teraz przycisk "run". Jeżeli w oknie trybu interaktywnego nie zauważysz żadnego błędu, będzie to oznaczało, że funkcja została prawidłowo zdefiniowana. Teraz możemy ja wywołać w trybie interaktywnym:
>>> kwadrat(5)
25
>>> kwadrat(3) + kwadrat(1)
10
Jak widzisz, aby wywołać funkcję, wystarczy wpisać jej nazwę, po czym w nawiasach wpisać wartość argumentu. Jeżeli argumentów jest wiele, to należy je oddzielić przecinkami.
🐍 Zdefiniuj funkcję o nazwie pole_kola
, która przyjmuje argument
promien
i zwraca wartość równania 3.14 * (promien ** 2)
. Wywołaj ją
w oknie trybu interaktywnego.
🐍 Wywołaj funkcję pole_kola
bez argumentu: pole_kola()
. Czy
rozumiesz treść wyjątku jaki został rzucony?
🐍 Wywołaj funkcję pole_kola
z dwoma argumentami: pole_kola(2, 3)
.
Porównaj treść wyjątku do błędu z poprzedniego zadania.
Funkcja nie musi posiadać żadnych argumentów, w takim wypadku nawiasy w nagłówku zostawiamy puste:
def funkcja_bez_argumentow():
return 123
Jak już wspomnieliśmy, funkcje mogą przyjmować więcej niż jeden argument:
def suma(a, b):
return a + b
def osoba(imie, nazwisko, tytul):
imie_nazwisko = imie + ' ' + nazwisko
return tytul + ' ' + imie_nazwisko.title()
Takie funkcje wywołujemy podobnie jak te z jednym argumentem:
>>> funkcja_bez_argumentow()
123
>>> suma(100, 45)
145
>>> suma(100, -20)
80
>>> osoba('jan', 'KOWALSKI', 'doktor')
'doktor Jan Kowalski'
🐍 Napisz funkcję cena_brutto
, która przyjmuje argumenty
cena_netto
oraz vat
i zwraca wartość brutto obliczoną według wzoru
netto * (1 + vat)
.
🐍 Napisz funkcję imie_nazwisko
, która przyjmuje argumenty imie
oraz nazwisko
i zwraca stringa z imieniem i nazwiskiem oddzielonymi
spacją. Upewnij się, że każde słowo w stringu zaczyna się od wielkiej
litery (użyj metody title
). Następnie napisz funkcję lubi
,
z argumentami imie
, nazwisko
oraz co
i wywołana w ten sposób:
lubi('jan', 'kowalski', 'KALAFIORY')
zwróci stringa
'Jan Kowalski lubi kalafiory'
. Pisząc funkcję lubi
użyj funkcji
imie_nazwisko
.
Poza funkcjami, które sami możemy zdefiniować, istnieją funkcje, które
zawsze są dostępne w interpreterze Pythona. Nazywamy je funkcjami
wbudowanymi. Przykładem jest funkcja len
, o której mówiliśmy w jednym
z poprzednich rozdziałów:
>>> len('python')
6
Poza tym mamy jeszcze 67 innych funkcji wbudowanych. Część z nich poznasz w kolejnych rozdziałach, a kilka innych opisaliśmy poniżej.
Przyjmuje jako argument dowolny obiekt i zwraca jego reprezentację jako string:
>>> str(2017)
'2017'
🐍 Zamień na string liczbę ujemną.
🐍 Zobacz co się stanie, jeżeli jako argument przekażesz do str
tekst.
Przyjmuje jako argument dowolny obiekt i zamienia go na integer:
>>> int(' 123 ')
123
🐍 Zobacz co się stanie, gdy przekażesz do funkcji int
liczbę
z częścią ułamkową (float), np. 3.14
.
🐍 Zobacz co się stanie, jeśli przekażesz do int
stringa, w którym
nie ma żadnej liczby.
🐍 Zobacz co się stanie, kiedy przekażesz do int
stringa, w którym
są zarówno litery jak i cyfry, np. Ala ma 2 koty
.
Przyjmuje jako argument dowolny obiekt i zamienia go na float:
>>> float('3.14')
3.14
🐍 Zobacz jak zachowa się funkcja float
, gdy wywołasz ją z:
integerem, stringiem z samymi literami, stringiem z samymi cyframi.
W tym rozdziale:
- dowiedzieliśmy się czym jest funkcja, jak ją definiować i wywoływać,
- poznaliśmy funkcje wbudowane
str
,int
orazfloat
.
🏁 Następny rozdział: Funkcja print
🏁