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) # AufrufEine 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) # 6Keyword 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") # FEHLERMehrere 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 6Scope (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:
def name(mit sprechendem, klein geschriebenem Namen.- Parameter mit Typ:
n: int. Der Doppelpunkt ist das „typ-sicher“. - Rückgabetyp
) -> int:(Pfeil, Typ, dann der Doppelpunkt am Zeilenende). - Hilfsvariablen für Ergebnis und Zähler anlegen, und zwar vor der Schleife, mit richtigem Startwert.
- Schleife mit Rechnung; Zähler am Ende hochzählen.
return ergebnis, danach folgt ohne Einrückung der Aufruf mitprint.
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 = 2Typ-Hinweise auch für Sammlungen: def f(l: list[int], i: int) -> int: · liste: list[int] = [1, 2] · d: dict[str, int] = {}.
- Summe →
ergebnis = 0 - Produkt →
ergebnis = 1(mit 0 kommt immer 0 raus!) - Maximum →
maxi = liste[0](nicht 0, sonst stimmt es bei negativen Zahlen nicht) - Zähler →
anzahl = 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- Funktion geschrieben, aber nicht aufgerufen (die Aufgabe verlangt fast immer beides).
returnvergessen und stattdessen nurprintin 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ügbarmath-Funktionen: sqrt, pow, exp, log, log2, pi, e. Ohne import verfügbar: min max sum len abs round type input print.