Menu
Coddy logo textTech

Das *args

Teil des Abschnitts Object Oriented Programming der Python-Journey von Coddy — Lektion 42 von 64.

Der *args-Parameter ermöglicht es einer Methode, eine beliebige Anzahl von Positionsargumenten zu akzeptieren. Das Sternchen sammelt alle zusätzlichen Positionsargumente in einem Tupel.

Hier ist ein Beispiel für eine Methode, die *args verwendet:

class Calculator:
    def add_numbers(self, *args):
        return sum(args)
    
    def show_numbers(self, *args):
        for i, num in enumerate(args):
            print(f"Number {i+1}: {num}")

Rufen Sie die Methode mit einer unterschiedlichen Anzahl von Argumenten auf:

calc = Calculator()
result1 = calc.add_numbers(1, 2, 3)
result2 = calc.add_numbers(10, 20, 30, 40, 50)
print(result1)  # 6
print(result2)  # 150

Das *args sammelt alle Argumente in einem Tupel:

calc.show_numbers(5, 10, 15, 20)

Ausgabe:

Number 1: 5
Number 2: 10
Number 3: 15
Number 4: 20

Kombinieren Sie reguläre Parameter mit *args:

class Logger:
    def log_message(self, level, *messages):
        print(f"[{level}]", end=" ")
        for message in messages:
            print(message, end=" ")
        print()  # Neue Zeile

logger = Logger()
logger.log_message("INFO", "User", "logged", "in")
logger.log_message("ERROR", "Connection", "failed")

Verwenden Sie *args in Konstruktormethoden:

class Team:
    def __init__(self, team_name, *players):
        self.team_name = team_name
        self.players = list(players)
    
    def show_team(self):
        print(f"Team: {self.team_name}")
        for player in self.players:
            print(f"- {player}")

team = Team("Warriors", "Alice", "Bob", "Charlie", "Diana")
team.show_team()

Ausgabe:

6
150
Number 1: 5
Number 2: 10
Number 3: 15
Number 4: 20
[INFO] User logged in 
[ERROR] Connection failed 
Team: Warriors
- Alice
- Bob
- Charlie
- Diana

Sie können Argumente auch beim Aufrufen von Methoden entpacken:

numbers = [1, 2, 3, 4, 5]
result = calc.add_numbers(*numbers)  # Entpackt die Liste
print(result)  # 15

Wichtiger Punkt: *args sammelt eine beliebige Anzahl von Positionsargumenten in einem Tuple. Verwenden Sie es, wenn Sie nicht wissen, wie viele Argumente an eine Methode übergeben werden. Der Name args ist konventionell – Sie könnten jeden beliebigen Namen nach dem Sternchen verwenden, aber args ist der Standard.

challenge icon

Aufgabe

Einfach

In dieser Herausforderung wirst du eine flexible Zahlen-Hilfsfunktion implementieren.

Bearbeite die Datei number_utils.py, um die Funktion sum_all_numbers zu implementieren, die eine beliebige Anzahl von numerischen Argumenten akzeptiert und deren Summe zurückgibt. Die Funktion sollte:

  • 0 zurückgeben, wenn keine Argumente übergeben werden
  • "Error: All arguments must be numbers" ausgeben und None zurückgeben, wenn nicht-numerische Argumente übergeben werden

Die Datei number_utils.py enthält detaillierte TODO-Kommentare, die dich bei der Implementierung unterstützen. Befolge diese Kommentare sorgfältig, um sicherzustellen, dass deine Lösung alle Anforderungen erfüllt.

Spickzettel

Der Parameter *args ermöglicht es einer Methode, eine beliebige Anzahl von Positionsargumenten zu akzeptieren. Das Sternchen sammelt alle zusätzlichen Positionsargumente in einem Tupel.

Grundlegende Verwendung von *args:

class Calculator:
    def add_numbers(self, *args):
        return sum(args)

calc = Calculator()
result1 = calc.add_numbers(1, 2, 3)  # 6
result2 = calc.add_numbers(10, 20, 30, 40, 50)  # 150

Kombinieren Sie reguläre Parameter mit *args:

class Logger:
    def log_message(self, level, *messages):
        print(f"[{level}]", end=" ")
        for message in messages:
            print(message, end=" ")
        print()

logger = Logger()
logger.log_message("INFO", "User", "logged", "in")

Verwenden Sie *args in Konstruktormethoden:

class Team:
    def __init__(self, team_name, *players):
        self.team_name = team_name
        self.players = list(players)

team = Team("Warriors", "Alice", "Bob", "Charlie")

Argumente beim Aufrufen von Methoden entpacken:

numbers = [1, 2, 3, 4, 5]
result = calc.add_numbers(*numbers)  # Unpacks the list

Wichtiger Punkt: *args sammelt eine beliebige Anzahl von Positionsargumenten in einem Tupel. Der Name args ist konventionell, aber Sie können jeden beliebigen Namen nach dem Sternchen verwenden.

Probier es selbst

from number_utils import sum_all_numbers

# Umfassender Testfall-Handler
test_case = input()

if test_case == "basic_test":
    # Teste Basisfunktionalität mit positiven Ganzzahlen
    print(sum_all_numbers(1, 2, 3))  # Sollte 6 zurückgeben
    print(sum_all_numbers())  # Sollte 0 zurückgeben
    print(sum_all_numbers(10, 20, 30, 40))  # Sollte 100 zurückgeben
    print(sum_all_numbers(1, 2, "three"))  # Sollte Fehler ausgeben und None zurückgeben

elif test_case == "float_test":
    # Teste mit Gleitkommazahlen
    print(sum_all_numbers(1.1, 2.2, 3.3))  # Sollte 6.6 zurückgeben
    print(sum_all_numbers(5.5, 5.0))  # Sollte 10.5 zurückgeben

elif test_case == "mixed_numbers_test":
    # Teste mit einer Mischung aus Ganzzahlen und Gleitkommazahlen
    print(sum_all_numbers(5, 5.5))  # Sollte 10.5 zurückgeben
    print(sum_all_numbers(10, 20.5, 30, 40))  # Sollte 100.5 zurückgeben

elif test_case == "zero_values_test":
    # Teste mit Nullwerten
    print(sum_all_numbers(0, 0, 0))  # Sollte 0 zurückgeben
    print(sum_all_numbers(0))  # Sollte 0 zurückgeben
    print(sum_all_numbers())  # Sollte 0 zurückgeben

elif test_case == "negative_values_test":
    # Teste mit negativen Werten
    print(sum_all_numbers(-1, -2, -3))  # Sollte -6 zurückgeben
    print(sum_all_numbers(-5, -5))  # Sollte -10 zurückgeben
    print(sum_all_numbers(-5, 5))  # Sollte 0 zurückgeben

elif test_case == "large_values_test":
    # Teste mit sehr großen Werten
    print(sum_all_numbers(1000000000, 1000000000))  # Sollte 2000000000 zurückgeben
    print(sum_all_numbers(1000000000, 2000000000.5))  # Sollte 3000000000.5 zurückgeben

elif test_case == "single_value_test":
    # Teste mit einem einzelnen Wert
    print(sum_all_numbers(5))  # Sollte 5 zurückgeben
    print(sum_all_numbers(-10))  # Sollte -10 zurückgeben
    print(sum_all_numbers(3.5))  # Sollte 3.5 zurückgeben

elif test_case == "error_handling_test":
    # Teste mit verschiedenen nicht-numerischen Werten
    print(sum_all_numbers("string"))  # Sollte Fehler ausgeben und None zurückgeben
    print(sum_all_numbers([1, 2, 3]))  # Sollte Fehler ausgeben und None zurückgeben
    print(sum_all_numbers({"key": "value"}))  # Sollte Fehler ausgeben und None zurückgeben
    print(sum_all_numbers(True))  # Sollte Fehler ausgeben und None zurückgeben
    print(sum_all_numbers(None))  # Sollte Fehler ausgeben und None zurückgeben

elif test_case == "mixed_valid_invalid_test":
    # Teste mit einer Mischung aus gültigen und ungültigen Werten
    print(sum_all_numbers(1, 2, "three"))  # Sollte Fehler ausgeben und None zurückgeben
    print(sum_all_numbers(1, [2, 3], 4))  # Sollte Fehler ausgeben und None zurückgeben
    print(sum_all_numbers(1.5, "two", 3))  # Sollte Fehler ausgeben und None zurückgeben

elif test_case == "empty_args_test":
    # Teste ohne Argumente
    print(sum_all_numbers())  # Sollte 0 zurückgeben
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Object Oriented Programming