Kurs maturalny z języka angielskiego!
kurs-maturalny-jezyk-angielski

PROGRAMOWANIE I ALGORYTMY

Zajęcia maturalne z informatyki
Olimpiada Informatyczna Juniorów
    Prowadzący: Marcin Kasprowicz
  • właściciel serwisu algorytm.edu.pl
  • wrzesień 2024 — start zajęć
  • czytaj więcej

Tworzenie funkcji w Pythonie


powrót

W Pythonie tworzenie własnych funkcji jest bardzo proste. Funkcje są używane do grupowania kodu w celu wykonania określonych operacji, które mogą być wywoływane wielokrotnie w programie. Dla osób, które rozpoczynają przygodę z programowaniem, tworzenie własnych funkcji może być nie do końca uzasadnione i potrzebne, dlatego postaram się krótko wyartykułować sens tworzenia własnych funkcji.

Wyobraź sobie, że pewną czynność, np. narysowanie jakiejś postaci, wykonujesz wielokrotnie. Nagle okazało się, że ta postać będzie miała inny wygląd. Jeśli utworzyłeś funkcję, która rysuję tę postać, to poprawiasz wygląd postaci tylko w jednym miejscu, natomiast, jeśli tego nie zrobiłeś, tylko za każdym razem, gdy potrzebowałeś tej postaci, wklejałeś cały jej kod w odpowiednie miejsce programu, to teraz będziesz musiał wejść w każde miejsce kodu z tą postacią i ją naprawić — obyś niczego nie pominął.

Nie od dziś wiadomo, że aby rozwiązać duży problem, warto podzielić go na małe problemy, następnie każdy z nich rozwiązać niezależnie i w ten sposób uzyskamy rozwiązanie całego problemu. I dlatego wyobraź sobie program do napisania, który dzielisz na mniejsze programy, czyli funkcje, rozwiązując je niezależnie, a następnie łączysz rozwiązania w całość, otrzymując w ten sposób kompletny program.

Dobrze napisaną funkcję możesz wykorzystywać w innych programach.

Oto kilka przykładów tworzenia funkcji w Pythonie.

Przykład 1 — funkcja z wartością zwrotną

Napisz program, który wyznaczy sumę dwóch liczb całkowitych.

Rozwiązanie
#początek funkcji suma
def suma(a, b): # 
    return a + b # zwrócenie wyniku sumy dwóch liczb 
#koniec funkji suma

# ---------program główny----------

# Wywołanie funkcji i drukowanie wyniku
print(dodaj(3, 5))  # Wynik: 8
Przykład 2 — funkcja z wartością zwrotną

Napisz program, który wyznaczy wartość bezwzględną z liczby rzeczywistej.

Rozwiązanie
#początek funkcji modul
def modul(a):
    if a < 0:
        return -a # jeśli warunek (a < 0) jest prawdziwy
    else:
	    return a # jeśli warunek (a < 0) jest nieprawdziwy
#koniec funkcji modul

# ---------program główny----------
a = float(input("Podaj liczbę: ")) # np. -4.7
# Wywołanie funkcji i drukowanie wyniku
print(modul(a))  # Wynik: 4.7
Przykład 3 — funkcja bez wartości zwrotnej (bez słowa return)

Napisz program, który wypisze n kolejnych liczb naturalnych.

Rozwiązanie
# początek funkcji wypisz
def wypisz(n):
    for i in range(n):
        print(i)
# koniec funkcji wypisz

# ---------program główny----------
n = int(input("Podaj liczbę: "))
# wywołanie funkcji wypisz
wypisz(n)
Przykład 4 — funkcja z parametrami z wartością domyślną

Możesz wstawiać parametry z wartością domyślną. Jeśli przy wywołaniu funkcji nie podasz dla takich parametrów wartości, to obowiązywać będzie wartość domyślna, w przeciwnym razie ta, która zostanie przekazana jako argument.

Napisz program, który wczyta liczbę całkowitą jako tekst i potrakuje ją jako liczbę zapisaną w systemie dziesiętnym, następnie w dwójkowym oraz piątkowym.

Rozwiązanie
# algorytm.edu.pl
def int_(n, b = 10): #funkcja zamienia tekst będący liczbą na liczbę typu int
    # domyślnie podajemy ją w systemie dziesiętnym
    w = 0
    for i in n:
		# wykorzystujemy schemat Hornera
        w = w*b + ord(i) - 48 # ord - uzyskujemy kod ASCII, dla zera jest to 48
    return w
	
# ---------program główny----------
n = input("Podaj liczbę w systemie dzisiętnym: ") # 101000

print(f"Tekst na liczbę w systemie dziesiętnym: ", int_(n)) # domyślnie
print(f"Z dwójkowego na dziesiętny: ",int_(n, 2)) # musimy ustawić drugi parametr
print(f"Z piątkowego na dziesiętny: ",int_(n, 5)) # musimy ustawić drugi parametr
Trochę więcej o argumentach funkcji.

Pamiętaj, że jeśli przekazujesz zmienne typu int, float, string, bool, to tworzone są ich kopie, co oznacza, że zmiany ich wartości nie będą widoczne w głównej części programu:

Przykład 5
# ----------algorytm.edu.pl-----------
def funkcja(a): # zmienna "a" jest kopią zmiennej przekazanej jako argument
    a = 90 # działamy na kopii

# głowna część programu
a = 100
funkcja(a)
print(a) # zostanie wypisane 100
Zmienne globalne

Możesz tworzyć zmienne, które będą miały zasięg w całym programie używając słowa kluczowego global przed nazwą zmiennej. Staraj się tworzyć zmienne tego typu tylko w uzasadnionych przypadkach, ponieważ łatwo jest stracić kontrolę nad działaniem naszego programu.

Przykład 6
# ----------algorytm.edu.pl-----------
def funkcja():
    global a # zmienna globalna jest widoczna w całym programie
    a = 90 
# głowna część programu

a = 100
funkcja()
print(a) # zostanie wypisane 90
Funkcja lambda

Funkcja lambda w Pythonie jest funkcją anonimową, co oznacza, że nie ma ona nazwy. Jest to mała funkcja, która może zawierać tylko jedno wyrażenie. Funkcje lambda są zwykle używane w miejscach, gdzie potrzebujemy przekazać krótki blok kodu do innej funkcji, na przykład funkcji map(), filter(), lub sorted().

Składnia funkcji lambda wygląda tak:

lambda argumenty: wyrażenie
  • "lambda" to słowo kluczowe rozpoczynające definicję funkcji.
  • "argumenty" to lista argumentów, które funkcja lambda może przyjąć. Może to być jeden lub więcej argumentów, oddzielonych przecinkami.
  • "wyrażenie" to jedno wyrażenie, które zostanie obliczone i zwrócone przez funkcję lambda.

Oto kilka przykładów użycia funkcji lambda:

  1. Dodawanie dwóch liczb:
dodawanie = lambda x, y: x + y 
wynik = dodawanie(3, 5) # wynik będzie równy 8
  1. Sortowanie listy liczb w odwrotnej kolejności:
liczby = [1, 4, 2, 7, 5] 
posortowane = sorted(liczby, key=lambda x: -x) # posortowane będzie [7, 5, 4, 2, 1]
  1. Filtrowanie liczb parzystych:
liczby = [1, 2, 3, 4, 5, 6] 
parzyste = list(filter(lambda x: x % 2 == 0, liczby)) # parzyste będzie [2, 4, 6]

Funkcje lambda są użyteczne, gdy potrzebujesz krótkiej funkcji do jednorazowego użycia, ale dla bardziej skomplikowanych funkcji zazwyczaj lepiej jest używać pełnych funkcji definiowanych słowem kluczowym "def".

Kilka zasad tworzenia funkcji
  1. Użyj słowa kluczowego def do zadeklarowania funkcji. Po nim podaj nazwę funkcji. Należy pamiętać, że nazwy funkcji powinny być opisowe i zgodne z konwencją nazewnictwa w Pythonie:
    def nazwa_funkcji():
        # Ciało funkcji, czyli
        # tutaj umieszczamy operacje, które funkcja ma wykonać
  2. Określ parametry funkcji, umieszczając je w nawiasach okrągłych po nazwie funkcji. Parametry to wartości, które mogą zostać przekazane do funkcji i wykorzystane wewnątrz niej.
    def nazwa_funkcji(parametr1, parametr2):
        # Ciało funkcji, czyli
        # tutaj umieszczamy operacje, które funkcja ma wykonać
  3. Dodaj instrukcje i operacje, które funkcja ma wykonać wewnątrz jej ciała. Możesz używać dowolnej kombinacji instrukcji warunkowych, pętli, operacji matematycznych itp.
    def nazwa_funkcji(parametr1, parametr2):
        # Ciało funkcji
        wynik = parametr1 + parametr2
        print("Wynik dodawania:", wynik)
  4. Jeśli funkcja ma zwracać wartość, użyj słowa kluczowego return wewnątrz funkcji. Może to być dowolna wartość, którą chcesz zwrócić z funkcji.
    def nazwa_funkcji(parametr1, parametr2):
        # Ciało funkcji
        wynik = parametr1 + parametr2
        return wynik
  5. Możesz teraz wywołać funkcję w programie i używać jej wyniku. Wywołanie funkcji odbywa się poprzez podanie jej nazwy, a następnie nawiasów okrągłych zawierających wartości argumentów.
    # Wywołanie funkcji
    nazwa_funkcji(2, 3)

To są podstawowe kroki do tworzenia funkcji w Pythonie. Pamiętaj, że możesz tworzyć funkcje z dowolnymi parametrami i dowolnym ciałem funkcji, w zależności od potrzeb. Funkcje są przydatne do uporządkowania kodu, zwiększania czytelności i wielokrotnego wykorzystania określonych operacji w programie.