PYTHON Funkcje | parametry wejściowe i wyjściowe
Funkcja może przyjmować parametry wejściowe oraz zwracać parametry wyjściowe.
Parametry wejściowe
Parametry wejściowe, to wartości, które chcemy przekazać do wnętrza funkcji, na których następnie wykonywane są jakieś czynności czy działania.
Dla przykładu weźmy sobie funkcję, która przywita użytkownika po imieniu:
def witaj(imie) :
print("Witaj", imie)
x = input("Podaj swoje imię: ")
witaj(x)
Jak widzimy, w definicji funkcji znalazł się parametr wejściowy o nazwie imie, który następnie pod tą samą nazwą został wykorzystany w wypisaniu.
Podczas wywołania funkcji również musiał zostać podany parametr wejściowy. Liczba parametrów wejściowych w wywołaniu funkcji oraz jej definicji musi być taka sama.
Od razu wspomnę, że od poprzedniego zdania jest wyjątek. Parametr wejściowy może mieć ustaloną wartość domyślną. Wówczas jeśli przy wywołaniu funkcji nie podamy wartości tego parametru, zostanie użyta właśnie wartość domyślna. Zobaczmy to na przykładzie:
def witaj(imie = "Jacek") :
print("Witaj", imie)
witaj()
Jak widzimy definicja funkcji zawiera jeden parametr wejściowy o nazwie imie oraz o domyślnie ustawionej wartości (=) “Jacek”.
Funkcję wywołaliśmy nie podając wartości parametru wejściowego, zatem została wykorzystana wartość domyślna, a na ekran wypisany został tekst: Witaj Jacek.
Parametrów wejściowych może nie być, natomiast może ich być również więcej jak jeden. Zobaczmy kolejny przykład:
def witaj(imie, nazwisko) :
print("Witaj", imie, nazwisko)
x = input("Podaj swoje imię: ")
y = input("Podaj swoje nazwisko: ")
witaj(x,y)
Tym razem mamy dwa parametry wejściowe imie oraz nazwisko.
Parametry wyjściowe
Przejdźmy od razu do kolejnego przykładu, program obliczający pole kwadratu po długości boku:
def pole_kwadratu(dlugosc_boku) :
pole = dlugosc_boku**2
print(pole)
x = int(input("Podaj długość boku kwadratu: "))
pole_kwadratu(x)
Mamy zdefiniowaną funkcję pole_kwadratu, która przyjmuje jeden parametr wejściowy, dokonuje na nim obliczeń, następnie wypisuje wynik na ekran. Musimy pamiętać, żeby do funkcji przekazać parametr o właściwym typie. W tym przypadku musi być to liczba.
Funkcja nie musi wypisywać wyniku na ekran, może go zwracać. Zmieńmy zatem powyższy program tak, aby funkcja zwracała wynik:
def pole_kwadratu(dlugosc_boku) :
pole = dlugosc_boku**2
return pole
x = int(input("Podaj długość boku kwadratu: "))
pole = pole_kwadratu(x)
print("Pole kwadratu o długości boku", x, "wynosi:", pole)
Jak widzimy, pojawiła się nowa linia wewnątrz funkcji w miejscu wypisania. Pojawiło się słowo kluczowe return, następnie nazwa wyliczonej zmiennej – parametr wyjściowy funkcji.
Skoro funkcja zwraca wynik, możemy go przypisać do dowolnej zmiennej podczas jej wywołania:
pole = pole_kwadratu(x)
Od tej chwili zmienna pole zawiera wynik działania funkcji, wartość, którą funkcja zwróciła.
Adnotacje typów
Przejdźmy teraz do kwestii typów danych w parametrach funkcji Pythona. Choć Python jest językiem dynamicznie typowanym, co oznacza, że typy danych są sprawdzane w czasie wykonania programu, istnieje mechanizm, który pozwala sugerować typy danych parametrów funkcji. Mowa tu o adnotacjach typów, które wprowadzają pewien poziom klarowności co do tego, jakiego typu danych oczekujemy.
Przyjrzyjmy się przykładowi:
def powitanie(imie: str) -> str:
return "Witaj, " + imie
W tej funkcji imie: str
wskazuje, że parametr imie
powinien być typu str
, czyli łańcucha znakowego. Część -> str
po nazwie funkcji sugeruje, że funkcja ta zwraca również łańcuch znakowy. Są to tzw. adnotacje typów – dają one znać innym programistom (lub narzędziom do analizy statycznej kodu) o oczekiwaniach dotyczących typów danych w funkcji.
Ważne jest jednak zrozumienie, że te adnotacje są tylko sugestiami i nie wpływają na działanie programu. Interpreter Pythona nie będzie egzekwował, aby imie
było rzeczywiście łańcuchem znakowym. Oznacza to, że jeśli przypadkowo lub celowo przekażesz do funkcji powitanie
wartość innego typu, Python nie zgłosi błędu związanego z typem danych, chyba że funkcja sama w sobie nie będzie mogła obsłużyć tego typu danych.
Adnotacje typów są przydatne do dokumentowania kodu i mogą pomagać w utrzymaniu jego klarowności, ale nie zapominajmy, że to programista jest odpowiedzialny za zapewnienie, że dane przekazywane do funkcji są odpowiedniego typu. W razie potrzeby, możemy dodać ręczne sprawdzanie typów w ciele funkcji, aby upewnić się, że wszystko działa jak należy.
Testy przypięte do lekcji | |
---|---|
Aby uzyskać dostęp do testów i ćwiczeń interaktywnych - Zaloguj się |