By lukasz August 30, 2021 In Kurs Python'a dla początkujących

Python – bezpłatny kurs dla początkujących #6, Funkcje

Po co są funkcje?

Do tej pory korzystaliśmy już z różnych funkcji wbudowanych w pythona takich jak ‘print()’ czy ‘range()’.

W tej sekcji nauczymy się jak tworzyć własne funkcje. Kiedy budujemy duży, komercyjny program może on zawierać setki tysięcy linii kodu. Gdybyśmy umieścili go w całości w jednym pliku byłoby niesamowicie trudno przy nim pracować – znalezienie tam czegokolwiek byłoby koszmarem.

Funkcja jest wydzieloną częścią kodu, która realizuje zawarte w niej instrukcje. Dzięki niej możemy:

  • uniknąć powtórzeń – nie ma sensu kopiować kilka razy tego samego kodu, bo jak coś się zmieni, to znowu w kilku miejscach będziemy musieli tego szukać i poprawiać. Łatwo też zapomnieć, że coś gdzieś skopiowaliśmy,
  • łatwo zarządzać kodem – skoro część kodu zostanie wydzielona, to wiemy dokładnie za co odpowiada. Gdy coś się popsuje to wiemy gdzie się udać.

Tak jak pilot do telewizora posiada wiele przycisków, które po kliknięciu uruchamiają różne funkcje np. zmieniają kanał, włączają tv, zwiększają głośność itd. tak wyżej wspomniana funkcja ‘print()’ zajmuje się wypisywaniem wybranej wartości w terminalu.

Dzisiaj nauczymy się pisać nasze własne funkcje 🙂

Własne funkcje

Funkcję oznaczamy słowem kluczowym “def” (skrót od define), po tym wpisujemy naszą wybraną nazwę funkcji, a na końcu umieszczamy “():”. W wierszu poniżej zaczynamy od wcięcia – wcięcie jest kluczowe, ponieważ oznacza, że kod który się tutaj znajduje należy do funkcji.

Koniec funkcji w pythonie oznaczamy robiąc dwa wiersze odstępu – koniecznie o tym pamiętaj, ponieważ w przeciwnym razie możesz wciągnąć do funkcji kod, którego tam nie chcesz 🙂

Na sam koniec musimy funkcję wywołać. To tak jak z pilotem do telewizora – musimy kliknąć przycisk, żeby coś się stało. Nawet jak napiszemy sobie funkcję, ale jej nie wywołamy (nie klikniemy tego przycisku w pilocie), to nic się nie stanie.

# our first function
def greeting():
    print('Hello there!')
    print('How are you?')


# function call
greeting()

# result:
# Hello there!
# How are you?

Przekazywanie argumentów do funkcji

Powyższa funkcja jest całkiem w porządku, ale możemy chcieć, aby witała każdą osobę po imieniu. Możemy to zrobić, dodając do funkcji parametry, które później można przekazać przy jej wywołaniu. Przekazując je, nazywamy je argumentami.

def greeting(name):
    print(f'Hello there {name}!')


# function call
greeting('Fred')
# another call of the same function
greeting('Anna')

# result:
# Hello there Fred!
# Hello there Anna!
Możemy ustawić wiele parametrów, które będzie można przekazać do funkcji – wszystko zależy co konkretnie potrzebujemy.
# function with 2 params
def greeting(name, age):
    print(f'Hello there {name} at the age of {age}! ')


# function call
greeting('Fred', 20)
greeting('Anna', 40)

# result:
# Hello there Fred at the age of 20!
# Hello there Anna at the age of 40!

Ważną informacją jest również to, że możemy określić domyślne wartości dla każdego parametru, bo na przykład nie zawsze będzie on nam potrzebny, albo występuje bardzo często i nie chcemy za każdym razem go przekazywać, tylko wtedy gdy będzie on się różnił. Wtedy parametry, które mają domyślne wartości muszą znajdować się na końcu. To znaczy, że tworząc funkcję która ma domyśle parametry, najpierw określamy te, które nie mają wartości domyślnych, a dopiero potem te, które je posiadają.

# function with 3 params, the last one has default value
def greeting(name, age, city='Warsaw'):
    print(f'Hi {name} at the age of {age} from {city}! ')


# we pass 2 arguments, so 3rd value will be default
greeting('Fred', 20)
# we pass 3 arguments, so 3rd value will be overwritten
greeting('Anna', 40, 'London')

# result:
# Hi Fred at the age of 20 from Warsaw! 
# Hi Anna at the age of 40 from London!

Typy funkcji

Funkcje dzielimy na dwa typy:

  • takie, które wykonują określone zadanie,
  • zwracają wartość.

Funkcje wykonujące określone zadanie

Przykładem są wszystkie funkcje, które wypisywaliśmy powyżej. Ich zadaniem było wypisanie tekstu powitania  z daną osobą. Jak to zrobione, zadanie zostaje zakończone. Innym przykładem może być też funkcja zmieniająca kanał w pilocie do telewizora – po kliknięciu zmieni kanał, zadanie wykonane.

Funkcje zwracające wartość

Może się zdarzyć tak, że:

  • robimy aplikację naszego własnego kalkulatora i potrzebujemy funkcji która nam policzy wynik,
  • albo aplikację dla tajnych agentów, którzy zamiast pełnych imion, używają tylko pierwszej litery swojego imienia, więc potrzebujemy tylko tej pierwszej literki,
  • albo pomagamy w odszyfrowaniu zgubionego hasła i szukamy tylko tego jednego które pasuje.

Łączy je to, że wynik działania funkcji będziemy mogli zapisać sobie w zmiennej. Dzięki temu, później możemy dalej jej użyć, najczęściej w innych funkcjach.

Funkcje zwracające wartość

Funkcje które chcemy, aby zwracały obliczoną wartość, tworzymy tak samo jak każdą funkcję. Jedyna różnica polega na tym, że na końcu tej funkcji musimy napisać co ona ma konkretnie zwrócić. To miejsce oznaczamy słowem “return“.

Słowo return, kończy działanie funkcji w miejscu, w którym zostało wywołane. To znaczy, że jeżeli Twój kod dojdzie do miejsca, gdzie znajduje się “return”, a pod nim umieścisz coś jeszcze, to nie zostanie to wywołane.

W związku z tym return zazwyczaj umieszcza się na samym końcu funkcji – musisz o tym pamiętać.

# first ordinary function which has two params
def greeting(name, age):
    print(f'Hi {name}, you are {age} old!')


# function which returns value
# we don't print anything, we just calculate an age
# by subtracting the year from the date of birth
def calculate_age(date_of_birth):
    current_year = 2021
    return current_year - date_of_birth


# Example usage:

# we save the result in a variable
# so that we can use it few times
fred_age = calculate_age(1980)

print(f'The age that we calculated is: {fred_age}')

# we can also pass it to another function
greeting('Fred', fred_age)

# ============================
# result:
# The age that we calculated is: 41
# Hi Fred, you are 41 old!

Funkcje są kluczowe w programowaniu i są używane dosłownie wszędzie. Dzięki ich zrozumieniu zdecydowanie poszerzasz swoją programistyczną wiedzę! Gratulacje! 🙂

Spróbuj poćwiczyć zdobytą dzisiaj wiedzę, stwórz:

  • funkcję, która dodaje do siebie dwie liczby, dodaje do tego jeszcze 10 i zwraca wynik,
  • funkcję, która przyjmuje w parametrach imię i miasto (ustaw wartość domyślną na ‘Warsaw’), wybiera pierwszą literkę każdego z nich, łączy je i zwraca.

W następnej lekcji napiszę jeszcze kilka ciekawych rzeczy o funkcjach. Nie przegap tego!

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

Leave a reply

en_USEnglish