Die Python-Funktion divmod(a, b) führt eine Ganzzahldivision und eine Modulo-Operation in einem einzigen Aufruf aus und liefert beide Ergebnisse als Tupel (quotient, rest). Sie ist effizienter als getrennte Aufrufe von a // b und a % b, weil intern nur eine Division durchgeführt wird.

Einleitung

Bei vielen Aufgaben braucht man Quotient und Rest gleichzeitig — etwa bei Zeitumrechnungen (Sekunden in Minuten und Sekunden), Paginierung (Item-Index in Page und Position) oder beim Aufteilen von Beträgen. divmod() macht das in einem Schritt und ist damit nicht nur kürzer, sondern auch performanter als zwei separate Operationen.

Die Funktion arbeitet mit ganzen Zahlen (int), Fließkommazahlen (float) und benutzerdefinierten Objekten, die __divmod__() implementieren.

Syntax

Python Syntax
divmod(a, b)
Parameter
a

Dividend — die Zahl, die geteilt wird (int, float oder Objekt mit __divmod__).

b

Divisor — die Zahl, durch die geteilt wird. Darf nicht 0 sein (ZeroDivisionError).

Rückgabewert

Ein Tupel (quotient, rest):

  • Bei int: (a // b, a % b) — beide Ergebnisse sind int.
  • Bei float: (math.floor(a / b), a % b) — beide Ergebnisse sind float.
  • Bei Custom-Objekten: das Ergebnis von a.__divmod__(b).

Beispiele

Ganze Zahlen

Python Beispiel
print(divmod(17, 5))
print(divmod(20, 4))
Output
(3, 2)
(5, 0)

Sekunden in Minuten und Sekunden

Python Beispiel
seconds = 3725
minutes, rest_sek = divmod(seconds, 60)
hours, minutes = divmod(minutes, 60)
print(f"{hours}h {minutes}m {rest_sek}s")
Output
1h 2m 5s

Paginierung

Python Beispiel
item_index = 47
items_pro_seite = 10
seite, position = divmod(item_index, items_pro_seite)
print(f"Seite {seite + 1}, Position {position + 1}")
Output
Seite 5, Position 8

Mit negativen Zahlen

Python Beispiel
# Python rundet bei // immer Richtung negativ unendlich
print(divmod(-17, 5))
print(divmod(17, -5))
Output
(-4, 3)
(-4, -3)

Mit Fließkommazahlen

Python Beispiel
print(divmod(10.5, 3))
Output
(3.0, 1.5)

Praktische Beispiele

Geldbetrag in Euro und Cent aufteilen

Python Beispiel
cent_total = 12_345
euro, cent = divmod(cent_total, 100)
print(f"{euro},{cent:02d} €")
Output
123,45 €

Mehrteiliger Dezimalbruch

Python Beispiel
# Tage, Stunden, Minuten, Sekunden aus Sekunden
total = 100_000  # Sekunden
days,    rest    = divmod(total, 86400)
hours, rest    = divmod(rest, 3600)
minutes, seconds = divmod(rest, 60)
print(f"{days}T {hours}h {minutes}m {seconds}s")
Output
1T 3h 46m 40s

Custom-Klasse mit __divmod__

Python Beispiel
class Money:
    def __init__(self, cent):
        self.cent = cent

    def __divmod__(self, anderer):
        # Aufteilen in Anteile + Rest in Cent
        shares, rest = divmod(self.cent, anderer)
        return shares, Money(rest)

    def __repr__(self):
        return f"Money({self.cent} ct)"

invoice = Money(1010)
shares, rest = divmod(invoice, 3)
print(f"Pro Person: {shares} ct, Rest: {rest}")
Output
Pro Person: 336 ct, Rest: Money(2 ct)

Praktische Hinweise

  • Performance: divmod(a, b) ist schneller als (a // b, a % b), weil intern nur eine Division ausgeführt wird.
  • ZeroDivisionError: Bei b == 0 wird ein ZeroDivisionError ausgelöst.
  • Idiomatisch für Zeit-Umrechnungen und alle Aufgaben, bei denen Quotient und Rest gemeinsam gebraucht werden.
  • Verwandte Operatoren: // (Ganzzahldivision), % (Modulo), math.fmod() (Float-Modulo nach C-Konvention).
/ Weiter

Zurück zu Builtin Functions

Zur Übersicht