Funktionsaufruf optimieren

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
erdmulch
User
Beiträge: 230
Registriert: Samstag 17. Juli 2010, 19:50

Hallo,

habe mal wieder eine kleine Frage.
Ich übe gerade Logikmodule was mit Python auch sehr schön funktioniert
hier der Code:

Code: Alles auswählen

def NAND(Output, Input, *l):
    for i in l:
        Input = Input and i
    Input = not Inputt
    if Input == True:            
        client.write_coil(Output-1, True)
        client.close()
    else:
        client.write_coil(Output-1, False)
        client.close()
    return Input
die Funktion wird wie folgt aufgerufen:
NAND(2, E1, E2)

es wäre aber viel logischer wenn zuerst die Eingänge aufgerufen würden und dann der Ausgang:
Wenn E1 Nicht und E2 Nicht geschaltet sind, dann soll Ausgang 2 kommen.

Leider kann ich den Funktionsaufruf nicht so machen:
NAND(E1, E2, 2)
weil ich die Anzahl der Eingänge brauche.

kann ich die Eingänge irgendwie Klammern?

vielen Dank
BlackJack

@erdmulch: Ich würde die Magie wahrscheinlich einfach weglassen, also gar kein ``*``-Argument und aus `input` würde ich dann `inputs` machen. Wobei wenn man das als eine Art Zuweisung vom Ergebnis an die Ausgabe sieht, dann steht das links doch schon ganz gut.

Wo zum Henker kommt `client` her, soll das wirklich geschlossen werden, und warum ist das alles so kompliziert geschrieben?

Code: Alles auswählen

from operator import and_

def nand(client, inputs, output):
    result = reduce(and_, inputs)
    client.write_coil(output - 1, result)
    client.close()
    return result
Antworten