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