Sie haben eine Funktion, die in einem E-Commerce-System verwendet wird, um den Gesamtpreis eines Warenkorbs zu berechnen und einen Rabatt anzuwenden. Die vorhandene Funktion ist unpure, da sie globale Variablen verwendet und direkt den Gesamtpreis ausdruckt. Ihre Aufgabe ist es, diese Funktion in eine pure Funktion umzuwandeln.
BASKET = [{'Produkt': 'T-Shirt', 'Preis': 20}, {'Produkt': 'Hose', 'Preis': 50}] DISCOUNT = 0.1 # Unpure function def calculate_total_unpure(): global BASKET, DISCOUNT total = sum(item['Preis'] for item in BASKET) discount = total * DISCOUNT total = total - discount print("Gesamtpreis:", total) return total # Pure function if __name__ == "__main__": print("Unpure function:") calculate_total_unpure() print("Pure function:") total = calculate_total_pure(#TODO) print("Gesamtpreis:", total)
Die Funktion calculate_total_unpure
wird als unrein angesehen aus folgenden Gründen:
BASKET
und DISCOUNT
. Das bedeutet, dass ihr Verhalten sich abhängig vom Zustand dieser globalen Variablen ändern kann, was sie kontextabhängig macht.print
aus, was ein Seiteneffekt ist. Eine reine Funktion sollte nur einen Wert zurückgeben und keine Seiteneffekte wie das Ausgeben auf der Konsole, das Ändern des globalen Zustands oder das Interagieren mit externen Systemen haben.Durch die Umwandlung der unpure function in eine pure function haben Sie eine bessere Trennung von Bedenken erreicht und die Testbarkeit der Funktion verbessert. Die neue Funktion ist jetzt unabhängig von globalen Zuständen und Seiteneffekten, was sie robuster und leichter zu verstehen macht.