Kapitel 8
Funktioner
Dela upp, återanvänd och strukturera kod.
Mål
Efter kapitlet ska du kunna...
- förklara varför funktioner används
- definiera och anropa egna funktioner
- skilja mellan parametrar och argument
- returnera och använda värden
- strukturera ett program med flera funktioner
8.1
En funktion är en namngiven koddel
Funktionen utför en bestämd uppgift.
Koden skrivs en gång och kan användas flera gånger.
Programmet delas upp i mindre, tydligare delar.
Utan funktion
Samma kod upprepas
print("Hej och välkommen")
print("Hej och välkommen")
print("Hej och välkommen")
Om texten ändras måste tre rader redigeras.
Med funktion
Skriv uppgiften en gång
def greet():
print("Hej och välkommen")
greet()
greet()
greet()
Funktionen definieras en gång och anropas tre gånger.
Två moment
Definiera och anropa
1. Definiera
def greet():
print("Hej")Beskriver vad funktionen ska göra.
2. Anropa
greet()Kör funktionens kod.
Viktig regel
Definitionen kör inte uppgiften
def greet():
print("Hej")
Python lär sig att funktionen finns.
Ingen hälsning skrivs ut förrän programmet når greet().
8.2 · Grundstruktur
Så definieras en funktion
def funktionsnamn():
kod som ska köras
defstartar definitionen.- Namnet beskriver uppgiften.
- Parenteser och kolon krävs.
- Funktionskroppen är indragen.
Funktion med information
Ta emot ett namn
def greet(name):
print(f"Hej {name}")
greet("Anna")
greet("Erik")
Hej Anna
Hej Erik
Steg för steg
Vad händer vid anropet?
- Programmet når
greet("Anna"). - Värdet
"Anna"skickas in. - Parametern
namefår värdet"Anna". - F-strängen använder värdet.
- Funktionen avslutas och programmet fortsätter.
8.3
Parameter och argument
Parameter
def greet(name):name är namnet som används inne i funktionen.
Argument
greet("Anna")"Anna" är värdet som skickas in vid anropet.
Flera parametrar
Värden kopplas efter position
def introduce(name, age):
print(f"{name} är {age} år gammal")
introduce("Sara", 17)
"Sara" → name
17 → age
Ordningen spelar roll
Argumenten följer parametrarna
introduce("Sara", 17)
Första argumentet hör till första parametern.
Andra argumentet hör till andra parametern.
introduce(17, "Sara") ger värdena fel betydelse.
Vanligt fel
Rätt antal argument krävs
def introduce(name, age):
print(f"{name} är {age} år")
introduce("Sara")
TypeError: introduce() missing 1 required
positional argument: 'age'
8.4
return skickar tillbaka ett värde
def add(a, b):
return a + b
result = add(3, 5)
print(result)
8
return · flöde
Argument in – resultat ut
3, 5→add(a, b)→return 8→result = 8Interaktiv kontroll
Argument och returvärde
Välj en funktion.
print eller return?
De gör olika saker
print() | return |
|---|---|
| Visar text i terminalen. | Skickar ett värde till anropet. |
| Resultatet är främst för användaren. | Värdet kan sparas och beräknas vidare. |
Återanvänd returvärdet
Resultatet kan användas igen
def add(a, b):
return a + b
total = add(10, 7)
print(f"Summan är {total}")
print(f"Dubbla summan är {total * 2}")
Summan är 17
Dubbla summan är 34
Kontrollfråga
Vad returneras?
def square(number):
return number * number
result = square(4)
Svar: funktionen returnerar 16.
Ingenting visas förrän programmet använder print(result).
8.5
Funktioner överst – huvudprogram nederst
def greet(name):
print(f"Hej {name}")
def add(a, b):
return a + b
# Huvudprogram
name = input("Vad heter du? ")
greet(name)
result = add(4, 6)
print(f"Summan är {result}")
Programstruktur
Två tydliga delar
Funktionsdefinitioner
- beskriver programmets uppgifter
- kan återanvändas
- ligger högst upp
Huvudprogram
- läser in data
- anropar funktioner
- visar resultat
Bra funktionsnamn
Namnet ska beskriva uppgiften
| Tydligt | Otydligt |
|---|---|
calculate_total() | do_it() |
print_receipt() | func1() |
is_even() | check() |
En funktion bör helst göra en tydlig uppgift.
8.6
Flera funktioner kan samarbeta
def greet(name):
print(f"Hej {name}")
def add(a, b):
return a + b
def multiply(a, b):
return a * b
Varje funktion har en avgränsad uppgift.
Huvudprogrammet
Anropa funktionerna
name = input("Vad heter du? ")
greet(name)
x = int(input("Skriv ett tal: "))
y = int(input("Skriv ett tal: "))
sum_result = add(x, y)
product_result = multiply(x, y)
print(f"Summan är {sum_result}")
print(f"Produkten är {product_result}")
Större exempel · del 1
Funktioner för ett kvitto
def calculate_subtotal(price, quantity):
return price * quantity
def calculate_discount(subtotal, percent):
return subtotal * percent / 100
def print_receipt(product, subtotal, discount, total):
print(f"Vara: {product}")
print(f"Pris före rabatt: {subtotal} kr")
print(f"Rabatt: {discount} kr")
print(f"Att betala: {total} kr")
Större exempel · del 2
Kvittots huvudprogram
product = input("Vilken vara? ")
price = int(input("Pris per vara: "))
quantity = int(input("Antal: "))
percent = int(input("Rabatt i procent: "))
subtotal = calculate_subtotal(price, quantity)
discount = calculate_discount(subtotal, percent)
total = subtotal - discount
print_receipt(product, subtotal, discount, total)
Kvitto · dataflöde
Resultat skickas mellan delarna
calculate_subtotal()→calculate_discount()→total→print_receipt()8.7 · Övning
Skapa tre funktioner
greet(name)skriver en hälsning.square(number)returnerar talet i kvadrat.double(number)returnerar talet gånger två.
Huvudprogrammet ska fråga efter namn och tal, anropa funktionerna och skriva ut resultaten.
Övning
Rektangelns area
def area(width, height):
return width * height
- Läs in bredd och höjd.
- Anropa funktionen med två argument.
- Spara returvärdet.
- Skriv ut arean.
Sammanfattning
Kom ihåg
defdefinierar en funktion; namnet med parenteser anropar den.- Parametrar står i definitionen, argument skickas vid anropet.
returnskickar tillbaka ett värde.print()visar något men ersätter intereturn.- Funktioner bör ha tydliga namn och avgränsade uppgifter.
- Funktionsdefinitioner överst och huvudprogram nederst ger tydlig struktur.