Praktische Beispiele für *args und **kwargs
Variadische Funktion für arithmetische Operationen
Erstellen wir eine Funktion, die verschiedene arithmetische Operationen auf eine beliebige Anzahl von Argumenten ausführen kann.
def arithmetic_operations(*args, operator='+'):
result = args[0]
for i in range(1, len(args)):
if operator == '+':
result += args[i]
elif operator == '-':
result -= args[i]
elif operator == '*':
result *= args[i]
elif operator == '/':
result /= args[i]
return result
print(arithmetic_operations(1, 2, 3, 4, operator='+')) ## Output: 10
print(arithmetic_operations(10, 3, 2, operator='-')) ## Output: 5
print(arithmetic_operations(2, 3, 4, operator='*')) ## Output: 24
print(arithmetic_operations(20, 4, operator='/')) ## Output: 5.0
In diesem Beispiel kann die Funktion arithmetic_operations()
eine beliebige Anzahl von Argumenten mit *args
akzeptieren, und die gewünschte arithmetische Operation wird mit dem Schlüsselwortargument operator
angegeben.
Sammeln von Benutzereingaben mit *args
Angenommen, Sie möchten eine Funktion erstellen, die eine beliebige Anzahl von Benutzereingaben sammelt und in einer Liste speichert.
def collect_inputs(*args):
user_inputs = []
for arg in args:
user_input = input(f"Enter {arg}: ")
user_inputs.append(user_input)
return user_inputs
names = collect_inputs("name", "age", "city")
print(names)
## Output:
## Enter name: LabEx
## Enter age: 30
## Enter city: New York
## ['LabEx', '30', 'New York']
In diesem Beispiel verwendet die Funktion collect_inputs()
*args
, um eine beliebige Anzahl von Eingabeaufforderungen zu akzeptieren, und sammelt dann die Antworten des Benutzers und speichert sie in einer Liste.
Logging-Funktion mit **kwargs
Stellen Sie sich vor, Sie möchten eine Logging-Funktion erstellen, die Nachrichten mit verschiedenen Ebenen (z. B. debug, info, warning, error) protokollieren kann und zusätzliche Metadaten enthalten kann.
def log_message(**kwargs):
log_level = kwargs.get('level', 'info')
message = kwargs['message']
metadata = kwargs.get('metadata', {})
print(f"[{log_level.upper()}] {message}")
for key, value in metadata.items():
print(f" {key}: {value}")
log_message(level='debug', message='This is a debug message')
## Output:
## [DEBUG] This is a debug message
log_message(level='warning', message='Something unusual happened', metadata={'user': 'LabEx', 'timestamp': '2023-04-18 12:34:56'})
## Output:
## [WARNING] Something unusual happened
## user: LabEx
## timestamp: 2023-04-18 12:34:56
In diesem Beispiel verwendet die Funktion log_message()
**kwargs
, um eine beliebige Anzahl von Schlüsselwortargumenten zu akzeptieren, einschließlich der Log-Ebene, der Nachricht und optionaler Metadaten.