====== 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.