📚 LernsiteFach wählenKOLEFINAQUBAETFÜDIMAINFEINKMAEL ↗

🧩 Funktionen — typ-sicher schreiben

INF — Informatik (Python & Datenbanken) · Prof. Dr. Mehler · ~10 Aufgaben · Python + relationale Datenmodelle

Funktionen — typ-sicher schreiben

Status: GEPRÜFT, alle Beispiele mit Python 3.12 ausgeführt.

Grundgerüst

def funktionsname(param1, param2):
# Anweisungen
return ergebnis

ergebnis = funktionsname(3, 4)   # Aufruf

Eine Funktion wird nicht automatisch ausgeführt, sondern erst beim Aufruf mit konkreten Argumenten.

Optionale Parameter

Parameter mit Standardwert dürfen nur am Ende der Schnittstelle stehen.

def summe(a, b, c=0):
return a + b + c
summe(3, 2)      # 5
summe(3, 2, 1)   # 6

Keyword Arguments

Ab dem ersten benannten Parameter müssen alle folgenden benannt sein.

begruessung(text="Hallo", name="Du")   # ok
begruessung("Hallo", name="Du")        # ok
begruessung(text="Hallo", "Du")        # FEHLER

Mehrere Rückgabewerte (= Tuple)

Mit Komma zurückgeben, mit zwei Variablen auffangen:

def plus1(a: int, b: int) -> tuple:
return a + 1, b + 1
erg1, erg2 = plus1(2, 5)   # 3 6

Scope (Gültigkeitsbereich)

Global deklarierte Variablen sind in Funktionen lesbar (schreibend nur mit global); lokale Variablen existieren nur innerhalb der Funktion.

Die typ-sichere Funktion (Klausur-Kern)

Erkennungsmerkmal: „Schreiben Sie eine typ-sichere Funktion, die als Übergabeparameter … hat und … zurückliefert.“

Die 6 Schritte:

  1. def name( mit sprechendem, klein geschriebenem Namen.
  2. Parameter mit Typ: n: int. Der Doppelpunkt ist das „typ-sicher“.
  3. Rückgabetyp ) -> int: (Pfeil, Typ, dann der Doppelpunkt am Zeilenende).
  4. Hilfsvariablen für Ergebnis und Zähler anlegen, und zwar vor der Schleife, mit richtigem Startwert.
  5. Schleife mit Rechnung; Zähler am Ende hochzählen.
  6. return ergebnis, danach folgt ohne Einrückung der Aufruf mit print.
def summe(n: int) -> int:
│   ergebnis = 0
│   i = 1
while i <= n:
│   │   vorzeichen = +1
│   │   if i % 2 == 0:
│   │   │   vorzeichen = -1
│   │   ergebnis += i * vorzeichen
│   │   i += 1
return ergebnis

print(summe(3))     # 1 - 2 + 3 = 2

Typ-Hinweise auch für Sammlungen: def f(l: list[int], i: int) -> int: · liste: list[int] = [1, 2] · d: dict[str, int] = {}.

⚠️ Der Startwert entscheidet über alle Punkte
  • Summeergebnis = 0
  • Produktergebnis = 1 (mit 0 kommt immer 0 raus!)
  • Maximummaxi = liste[0] (nicht 0, sonst stimmt es bei negativen Zahlen nicht)
  • Zähleranzahl = 0

Wer das Summen-Muster blind auf eine Produkt-Aufgabe kopiert, bekommt immer 0 heraus. Das ist der häufigste Transferfehler.

def produkt_gerade(n: int) -> int:   # für n=6: 2·4·6 = 48
│   ergebnis = 1                     # NICHT 0!
│   i = 2
while i <= n:
│   │   ergebnis = ergebnis * i
│   │   i = i + 2
return ergebnis
⚠️ Punktekiller
  • Funktion geschrieben, aber nicht aufgerufen (die Aufgabe verlangt fast immer beides).
  • return vergessen und stattdessen nur print in der Funktion.
  • Typ-Hinweise weglassen, obwohl „typ-sicher“ dasteht.
  • Den Aufruf versehentlich eingerückt in die Funktion schreiben.

Module

import math                 # math.sqrt(25) → 5.0
import math as m            # m.pi
from random import randint  # randint(1, 6)
from module1 import *       # alles direkt verfügbar

math-Funktionen: sqrt, pow, exp, log, log2, pi, e. Ohne import verfügbar: min max sum len abs round type input print.