Kommentare # erklären, warum etwas in der nächsten Zeile gemacht wird.
Z.B. ›# Wörterbuch erstellen‹ erklärt nicht das warum, statt dessen sollte die Funktion besser soetwas wie ›create_command_dictionary‹ heißen.
Wenn man eine laufende Nummer braucht, nimmt man enumerate, das auch einen Startwert verträgt.
Einen String mit ‹str› nochmal in einen String umzuwandeln ist unsinnig. Explizit auf True zu prüfen ist unnötig und das was im else-Block steht ist fast identisch zum if-Block, und sollte daher zusammengefasst werden:
Code: Alles auswählen
def create_command_dictionary(udp_socket):
command_to_func = {
b"tor_auf_zu": partial(tor_auf_zu, udp_socket),
b"reply_loxone": partial(reply_loxone, udp_socket)
}
for aus_nummer, aus_pin, initial_wert in enumerate(zip(PIN_AUS, INITIAL_AUS), start=1):
command_to_func["ausgang_{}_ein".format(aus_nummer).encode()] = partial(
ausgang_setzen, udp_socket, aus_pin, not initial_wert)
command_to_func["ausgang_{}_aus".format(aus_nummer).encode()] = partial(
ausgang_setzen, udp_socket, aus_pin, initial_wert)
return command_to_func