import inspect

def test(ersterparameter, fisch, krustentier=None):
    # inspect.currentframe() gibt ein Frame-Objekt zurück was auf den derzeitigen Frame verweist (auf den Funktionsaufruf)
    # inspect.getargvalues gibt ein namedtuple zurück, was args (alle Parameternamen), keywords (Keyword-Parameter), positionelle Parameter und locals (alle lokal bekannten Variablen als dict, das sind mehr als die Parameter)
    argvalues = inspect.getargvalues(inspect.currentframe())
    argument_value_dict = {}
    # Nehme Liste aller bekannten Parameter und hole aus den locals ihren Wert
    for argument in argvalues.args:
        argument_value_dict.update({argument:argvalues.locals[argument]})
        print(argument_value_dict)

Ruft man obiges aus bekommt man:

test(5, fisch="Dorade")
{'ersterparameter': 5, 'fisch': 'Dorade', 'krustentier': None}