5. Funkcje - majsylw/Introduction-to-programming-in-python GitHub Wiki

Funkcja jest specjalnie wydzielonym fragmentem kodu, który możemy wykorzystywać wielokrotnie w różnych miejscach programu, a jego działanie jest konkretnie sprecyzowane. W trakcie trwania tego kursu wykorzystywaliśmy już kilka funkcji wbudowanych, takich jak: print(), input(), type(), format(). Nie trzeba było ich pisać samodzielnie, bo zrobił to już za nas inny programista. Wystarczyło, żebyśmy wiedzieli jak one działają i jak z nich korzystać. Bez funkcji praca zespołowa nad nawet średnim programem byłaby prawie niemożliwa. Większość funkcji wymaga informacji z zewnątrz. Są to liczby, tekst i inne obiekty. Większość z nich również pewne informacje zwraca.

Definicja funkcji

W Pythonie bloki kodu (w tym również funkcje) są wyróżniane za pomocą wcięć. Aby napisać własną funkcję posłużymy się słowem kluczowym def, podążając według schematu:

def nazwa_funkcji(arument1, argument2, ...):
    instrukcja1
    instrukcja2
    ...

Przyjrzyjmy się bliżej tej definicji funkcji. Na samym początku mamy słowo kluczowe def oznaczające tyle co "tworzę definicję", następnie mamy nazwę naszej funkcji. Przy tworzeniu nazw funkcji kieruj się tymi samymi regułami, co przy tworzeniu zmiennych - najlepiej jeśli nazwa funkcji odzwierciedla operację, jaką dany fragment kodu wykonuje. Później znajdują się dwa nawiasy () i obowiązkowy znak :. Zmienne, które będą pojawiać się wewnątrz nich to argumenty. Poniżej przykład programu, w którym zdefiniowano dwie funkcje, jedna z nich przyjmuje jeden argument, a druga nie pryzmuje ich wcale.

# Funkcja wypisuje na ekranie napis "Witam w moich skromnych progach!"
# Przyjmowane argumenty: nic
# Zwracane argumenty: nic
def powitanie():
    print("Witam w moich skromnych progach!")

# Funkcja wypisuje na ekranie napis "Witam <imie> w moich skromnych progach!"
# Przyjmowane argumenty: imie - literał znakowy
# Zwracane argumenty: nic
def powitanie_goscia(imie):
    print("Witam", imie, " w moich skromnych progach!")

# Funkcja glowna programu
def main():
    nazwa = "Sylwia"
    powitanie() # wywołanie funkcji powitanie - bez jakichkolwiek argumentów jak w powyższej definicji
    powitanie_goscia(nazwa) # wywołanie funkcji powitanie_goscia z wykorzystaniem zmiennej nazwa
    powitanie_goscia("Czytelnik") # wywołanie funkcji powitanie_goscia z wykorzystaniem napisu "Czytelnik"

main()

Zwróć uwagę, że zmienna imie wykorzystywana jest tylko wewnątrz ciała funkcji powitanie_goscia(), czyli tam gdzie została utworzona (przekazana jako argument). Natomiast w funkcji main() korzystamy już z zadeklarowanej zmiennej nazwa oraz napisu Czytelnik.

Argumenty nazwane

Napiszmy teraz trochę bardziej rozbudowaną funkcję - przyjmującą więcej niż jeden argument.

# Funkcja wypisuje na ekranie napis
# Przyjmowane argumenty: wstep - literał znakowy, imie - literał znakowy, miejsce - literał znakowy
# Zwracane argumenty: nic
def wypowiedz(wstep, imie, miejsce):
    print(wstep, imie, miejsce)

def main()
    wypowiedz("Witam", "Czytelnika", "na kursie programowania") # Na ekranie pojawi się napis: Witam Czytelnika na kursie programowania
    wypowiedz(imie="Czytelnika",miejsce="na kursie programowania", wstep="Witam")# Na ekranie pojawi się napis: Witam Czytelnika na kursie programowania

main()

Wprowadzoną nowością w powyższym kodzie jest zastosowanie zmiennych nazwanych w wywołaniu funkcji wypowiedz(). Otóż korzystając z nazw argumentów podanych w trakcie definiowania naszej własnej funkcji możemy wewnątrz jej wywołania (w innym miejscu kodu) przypisać im konkretne wartości - co między innymi pozwala na zamianę ich kolejności. Udało nam się ten trik stosować już wcześniej przy wywoływaniu funkcji print. Korzystaliśmy z argumentów nazwanych sep oraz end. Więcej na temat argumentów nazwanych funkcji print() możesz przeczytać w dokumentacji pythona [ENG].

Instrukcja return

Pozostał nam jeszcze przypadek funkcji, które zwracają wartość. Jest to dokonywane w ciele funkcji za pomoca instrukcji return. Ponownie popatrzmy na konkretny przykład:

# Funkcja tworzy napis
# Przyjmowane argumenty: imie - zmienna napisowa
# Zwracane argumenty: zlozony napis "<imie>, zapraszam do rozwiazania zadania"
def zwroc_tekst(imie):
    return imie + ", zapraszam do rozwiazania zadania"

# Funkcja dodaje dwie liczby
# Przyjmowane argumenty: skladnik1 - zmienna liczbowa, skladnik2 - zmienna iczbowa
# Zwracane argumenty: suma dwoch liczb
def suma(skladnik1, skladnik2):
    return skladnik1+skladnik2

# Funkcja odejmuje dwie liczby
# Przyjmowane argumenty: odjemna - zmienna liczbowa, odjemnik - zmienna iczbowa
# Zwracane argumenty: wynik - wynik odejmowania odjemnika od odjemnej
def roznica(odjemna, odjemnik):
    wynik = odjemna - odjemnik
    return wynik

def main():
    nazwa = input("Podaj swoje imie: ")
    print(zwroc_tekst(nazwa)) # wypisujemy komunikat z imieniem na ekran stosujac funkcje print - samo wywolanie funkcji zwroc_tekst() w tym miejscu nie wystarczy, bo ona jedynie skleja ze soba napisy i zwraca wynik tej konkatenacji 

    # Prosimy uzytkownika o podanie 2 liczb zmiennoprzecinkowych
    a = float(input("Podaj pierwsza liczbe: ")) # przyjmijmy dla spojnosci ze liczba bedzie zmiennoprzecinkowa
    b = float(input("Podaj druga liczbe: ")) # przyjmijmy dla spojnosci ze liczba bedzie zmiennoprzecinkowa

    # wykonujemy obliczenia - wywolujemy zdefiniowane wczesniej funkcje suma i roznica 
    suma_liczb = suma(a,b)
    roznica_liczb = roznica(suma_liczb,b)

    # Wyswietlamy wyniki
    print(a,"+",b,"=",suma_liczb)
    print(suma_liczb,"-",b,"=",roznica_liczb)

main() # 

Funkcje suma() oraz roznica() przyjmuja dwa argumenty liczbowe oraz zwracaja wynik odpowiedniego dzialania korzystajac z instrukcji return. Zwróć uwagę na to, co zostało napisane wewnatrz funkcji main() - z wynikiem zwracanym przez którąkolwiek z zastosowanych powyżej funkcji musimy dalej coś zrobić. Możemy go bezpośrednio wyświetlić na ekran jak w przypadku linijki kodu print(zwroc_tekst(nazwa)) lub przechować w nowej zmiennej suma_liczb = suma(a,b) i następnie wyświetlić lub wykorzystać do dalszych obliczeń!

⚠️ **GitHub.com Fallback** ⚠️