====== LU05.L03 - Aktualisierung von Lagerbeständen mit Transaktionen ======
class Transaction:
def __init__(self, product, quantity):
self.product = product
self.quantity = quantity
def update_inventory(inventory, *transactions):
"""Updates the inventory based on the provided transactions."""
for transaction in transactions:
if transaction.product in inventory:
inventory[transaction.product] += transaction.quantity
else:
inventory[transaction.product] = transaction.quantity
if __name__ == '__main__':
# Teste deine Funktion
inventory = {'Apfel': 10, 'Birne': 5}
transactions = [Transaction('Apfel', 3), Transaction('Birne', -2)]
update_inventory(inventory, *transactions)
print(inventory) # Erwarteter Output: {'Apfel': 13, 'Birne': 3}
=== Warum wird * in update_inventory(inventory, *transactions) verwendet? ===
In Python wird der ''*''-Operator im Kontext von Funktionen verwendet, um eine variable Anzahl von Positional-Argumenten in einer Liste zu sammeln. Wenn der ''*''-Operator beim Aufrufen einer Funktion verwendet wird, wie in ''update_inventory(inventory, *transactions)'', hat er die umgekehrte Wirkung: Er entpackt eine Liste oder ein Tupel in einzelne Positional-Argumente für die Funktion.
In Ihrem Beispiel ist ''transactions'' eine Liste von ''Transaction''-Objekten. Wenn Sie ''update_inventory(inventory, *transactions)'' aufrufen, werden die ''Transaction''-Objekte in der Liste als einzelne Positional-Argumente an die Funktion ''update_inventory'' übergeben.
Das bedeutet, dass der Aufruf von ''update_inventory(inventory, *transactions)'' äquivalent ist zu einem Aufruf wie ''update_inventory(inventory, Transaction('Apfel', 3), Transaction('Birne', -2))'', vorausgesetzt, dass ''transactions = [Transaction('Apfel', 3), Transaction('Birne', -2)]''.
Dies ist besonders nützlich, wenn die Anzahl der ''Transaction''-Objekte variabel ist, da die Funktion ''update_inventory'' so gestaltet ist, dass sie eine variable Anzahl von ''Transaction''-Objekten akzeptiert.