Dodatkowe pola wpisu
Sama wiadomość w dzienniku często nie wystarcza, żeby zdiagnozować problem: który zawór, przy jakim ciśnieniu, na której orbicie? Każdy podsystem chce dołączać inne szczegóły, a nikt nie chce format_log() z pięćdziesięcioma opcjonalnymi parametrami.
Pozwól funkcji przyjmować pola, które ma wywołujący, a potem podawaj jej pola ze słowników.
Ukończ etap 1, aby odblokować ten etap.
Pozwól format_log() przyjmować dowolne dodatkowe argumenty nazwane i dopisywać każdy na końcu linii jako spację i key=value, w kolejności przekazania:
[T+00:12:05] INFO Silniki w normie [T+00:14:47] ERROR Zawór paliwa 2 nie odpowiada valve=2 pressure_kpa=310
Dodaj **fields po msg. W środku fields to słownik: zbuduj linię, a potem przejdź pętlą po fields.items() i dopisuj do niej.
Ukończ etap 1, aby odblokować ten etap.
Pola często przychodzą gotowe w słownikach. Przekaż je jako argumenty nazwane przez **: najpierw sam reading, potem reading i context razem:
[T+00:16:03] WARN Silnik gorący sensor=ENG-2 temperature_c=455.2 [T+00:16:03] WARN Silnik gorący sensor=ENG-2 temperature_c=455.2 orbit=12 station=GS-2
format_log(..., **reading) działa tak, jakbyś sam napisał sensor="ENG-2", temperature_c=455.2.
Podpowiedzi
Dowolna liczba argumentów **kwargs
# **kwargs - dowolna liczba argumentów nazwanych
def ship_parameters(**data):
"""Wyświetla parametry statku kosmicznego."""
print("Parametry statku:")
for key, value in data.items():
print(f" {key}: {value}")
print()
ship_parameters(name="Enterprise", ship_class="Galaxy")
ship_parameters(
name="Voyager",
launch_year=1977,
speed_km_s=17,
active=True
)
Oddziel argumenty przecinkami. Każde uruchomienie przekazuje je jako sys.argv[1:].