Funktionsdefinitioner och parametrar
Skriva återanvändbar kod genom funktioner med parametrar och returvärden.
Ca 60 min · del av Programmering i Python
Begrepp i lektionen
- def
- argument
- parametrar
- return
- standardargument
Efter denna lektion kommer du att kunna skapa återanvändbara Python-funktioner med parametrar, hantera returvärden samt använda standardargument och förstå variabelers räckvidd.
Vad är en funktion och varför använder vi dem?
I programmering är en funktion en namngiven och återanvändbar block av kod som utför en specifik uppgift. Istället för att skriva samma koduppsättning om och om igen samlar vi koden i en funktion. Detta följer en av programmeringens viktigaste principer: DRY (*Don't Repeat Yourself*).
I Python definieras en funktion med nyckelordet `def`, följt av funktionens namn, parenteser `()` och ett kolon `:`. Koden som hör till funktionen måste indenteras (skjutas in med tab/mellanrum).
python
def säg_hej():
print("Hej och välkommen till kursen!")
Att enbart definiera en funktion gör inte att koden körs direkt. Funktionen sparas i minnet och exekveras först när den anropas med sitt namn följt av parenteser:
python
säg_hej() # Anropar funktionen
Tre huvudsakliga fördelar:
1. Återanvändbarhet: Skriv koden en gång, anropa den så många gånger du behöver.
2. Struktur: Stora program blir lättare att förstå när de delas upp i mindre, fokuserade funktioner.
3. Underhållbarhet: Om du behöver rätta ett fel gör du det på ett ställe istället för på tjugo.
Parametrar, Argument och Returvärden
För att funktioner ska vara flexibla behöver de kunna ta emot indata och skicka tillbaka utdata.
Parametrar vs Argument
- En parameter är variabelnamnet som står i funktionens definition (fungerar som en lokal platshållare).
- Ett argument är det faktiska värdet som skickas med när funktionen anropas.
python
def hälsa_person(namn): # 'namn' är en parameter
print(f"Hej, {namn}!")
hälsa_person("Alice") # "Alice" är ett argument
Returvärden med `return`
För att skicka ett resultat tillbaka från funktionen använder vi nyckelordet `return`. Värdet som returneras kan sparas i en variabel eller användas i vidare beräkningar.
python
def dubblera(tal):
return tal * 2
resultat = dubblera(5) # resultat tilldelas värdet 10
print(resultat)
Skillnaden mellan `print()` och `return`
Det är mycket viktigt att inte blanda ihop `print()` och `return`:
- `print()` visar text på skärmen för användaren, men lämnar inget värde kvar till programmet.
- `return` skickar tillbaka ett datavärde från funktionen. Om du inte använder `return` returnerar funktionen automatiskt värdet `None`.
Standardargument och Nyckelordsargument
Python gör det möjligt att definiera parametrar med förvalda värden, så kallade standardargument (*default arguments*). Om anroparen inte skickar med något värde för en sådan parameter används standardvärdet.
Standardargument
python
def beräkna_pris(pris, moms_sats = 0.25):
return pris * (1 + moms_sats)
Anrop utan att ange moms_sats (använder 0.25):
totalt_1 = beräkna_pris(100) # Returnerar 125.0
Anrop där moms_sats överskrids med 0.12 (12% moms):
totalt_2 = beräkna_pris(100, 0.12) # Returnerar 112.0
*Viktig regel*: Alla parametrar utan standardvärden måste placeras före parametrar som har standardvärden i funktionsdefinitionen.
Positionella argument vs Nyckelordsargument
När du anropar en funktion kan du antingen skicka argument baserat på ordning (positionella) eller genom att explicit ange parameternamnet (nyckelordsargument):
python
def beskriv_hus(stad, typ="villa"):
print(f"Ett hus av typen {typ} i {stad}.")
Nyckelordsargument (ordningen spelar ingen roll när namnen anges):
beskriv_hus(typ="lägenhet", stad="Malmö")
Räckvidd (Scope) och Lokala Variabler
När du skapar variabler inuti en funktion existerar de endast under tiden som funktionen körs. Detta koncept kallas för variabelns räckvidd eller scope.
Lokalt scope
Variabler som skapas inuti en funktion kallas lokala variabler. De är endast synliga och tillgängliga *inuti* den funktionen.
python
def beräkna():
x = 10 # 'x' är en lokal variabel
return x * 2
beräkna()
print(x) # KASTAR FEL! NameError: name 'x' is not defined
När funktionen har kört klart rensas de lokala variablerna ur minnet.
Globalt scope
Variabler som definieras i huvudprogrammet (utanför funktioner) kallas globala variabler. En funktion kan läsa globala variabler, men bör normalt inte ändra dem direkt.
python
moms = 0.25 # Global variabel
def beräkna_moms(belopp):
return belopp * moms # Kan läsa 'moms'
Bästa praxis: "Svart låda"
En välskriven funktion fungerar som en isolerad "svart låda":
- Den tar emot allt den behöver via sina parametrar.
- Den skickar ut sitt resultat via `return`.
- Den undviker sidoeffekter (ändrar inte variabler utanför sig själv).
Hela kursen
- Variabler, datatyper och I/O
- Operatorer och logiska uttryck
- Villkorssatser
- Slingor och iteration
- Listor och sekvenser
- Tupler och mängder
- Dictionaries
- Iteration och list comprehension
- Funktionsdefinitioner och parametrar
- Variablers räckvidd (Scope)
- Moduler och Pythons standardbibliotek
- Läsa och skriva filer
- Felhantering och undantag
- Text- och databearbetning