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) # 150Das *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: 20Kombinieren 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
- DianaSie 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) # 15Wichtiger 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.
Aufgabe
EinfachIn 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) # 150Kombinieren 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 listWichtiger 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ückgebenDiese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Object Oriented Programming
1Grundlagen der OOP
Externe DateienEinführung in die OOPKlassen vs. ObjekteDer self-ParameterMethodenAttributeKonstruktor-Methode (__init__)Zusammenfassung – Einfacher Taschenrechner4Vererbung
Grundlagen der VererbungDie super()-FunktionMethoden überschreibenMehrfachvererbungMethod Resolution OrderZusammenfassung - Mitarbeiter-Hierarchie7Spezielle Methoden
Einführung in Magic MethodsOperator-ÜberladungMagic Methods für ContainerRückblick - Eigene Liste10Entwurfsmuster Teil 1
Einführung in EntwurfsmusterSingleton-MusterFactory-MusterObserver-MusterStrategy-Muster13Abschlussherausforderungen
E-Learning-PlattformBanksystemSpielcharakter-EntwicklungFahrzeugvermietung2Dekoratoren
Einführung in DekoratorenProperty-DekoratorStatischer Methoden-DekoratorKlassenmethoden-Dekorator5Polymorphismus
Methoden-Überschreiben vertieftDuck TypingAbstrakte Klassen und MethodenInterface-DesignZusammenfassung – Formen-Rechner8Fortgeschrittene OOP-Konzepte
Komposition vs. VererbungMixinsStatische und KlassenmethodenKlassendekoratorenContext Manager3Klasseneigenschaften
Instanz- vs. KlassenvariablenProperty-DekoratorenPrivate AttributeZusammenfassung – Bankkonto-Manager6Kapselung
Public, Protected, Private MemberZugriffsmodifikatorenInformation HidingProperty-Decorators für FortgeschritteneZusammenfassung - Studentenverwaltungssystem12Projekt: Bibliotheksverwaltung
ProjektübersichtBuch- und Benutzerklassen