Seite 1 von 1

Funktionsaufruf optimieren

Verfasst: Sonntag 4. Oktober 2015, 16:43
von erdmulch
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

Re: Funktionsaufruf optimieren

Verfasst: Sonntag 4. Oktober 2015, 17:42
von 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