Wir können diese Aufgabe mit einer Schleife, einer List Comprehension oder der map
-Funktion lösen. Hier sind Beispiele für beide Ansätze:
Mit Schleife:
def increment_numbers(numbers): new_numbers = [] # create an empty list to store the new numbers for number in numbers: new_numbers.append(number + 1) # append the incremented value to the new list return new_numbers
Diese Techniken werden wir im Verlauf des Kurses genauer kennenlernen.
Mit List Comprehension:
def increment_numbers(numbers): return [number + 1 for number in numbers]
Mit map
-Funktion:
def increment_numbers(numbers): return list(map(lambda x: x + 1, numbers))
Die Funktion gibt die neue Liste zurück, wie in den vorherigen Schritten gezeigt.
if __name__ == '__main__': new_numbers = increment_numbers(numbers) print('Original numbers:', numbers) print('Incremented numbers:', new_numbers)
Lassen Sie die Pytests laufen.
Original numbers: [1, 2, 3, 4, 5] Incremented numbers: [2, 3, 4, 5, 6]
Die Musterlösung zeigt zwei verschiedene Möglichkeiten, wie eine Funktion eine neue Liste erstellen kann, in der alle Elemente der Eingabeliste um eins erhöht wurden, ohne die ursprüngliche Liste zu verändern. Dies ist ein wichtiger Aspekt der funktionalen Programmierung und hilft dabei, den Code besser verständlich und vorhersagbar zu machen.
Die Lösung zur Aufgabe achtet auf die Prinzipien einer pure function und immutable values aus folgenden Gründen:
increment_numbers
ist eine reine Funktion, da sie keine Seiteneffekte hat. Sie verändert keine globalen Variablen, druckt nichts auf die Konsole aus und interagiert nicht mit externen Systemen.+1
erhöht werden, ohne die ursprüngliche Liste zu verändern. Dies ist ein zentraler Aspekt der Unveränderlichkeit und stellt sicher, dass die ursprünglichen Daten intakt bleiben.append
und Unveränderlichkeit:append
verwendet wird, stellt dies kein Problem dar, da append
auf eine neue, innerhalb der Funktion erstellte Liste angewendet wird. new_numbers
ist nicht die ursprüngliche Liste, die als Argument übergeben wurde, sondern eine separate, leere Liste, die in der Funktion erzeugt wird.numbers
nicht verändert, und das Prinzip der Unveränderlichkeit bleibt gewahrt. Die Verwendung von append
führt lediglich dazu, dass die neuen Werte zur neuen Liste hinzugefügt werden, ohne die Eingabeliste zu beeinflussen.Zusammengefasst:
increment_numbers
erfüllt die Anforderungen einer pure function, da sie keine Seiteneffekte aufweist und sich ausschließlich auf ihre Eingabewerte stützt.append
ist in diesem Kontext unproblematisch, da sie nur auf eine neu erstellte Liste angewendet wird und die ursprüngliche Liste unverändert bleibt.