Frage

Ich versuche, jeden Index in einer 8-stelligen Binärkette zu überprüfen. Wenn es '0' dann ist es 'OFF' sonst seine 'ON'.

Gibt es eine prägnante Art und Weise diesen Code mit einem Schalter ähnlicher Funktion zu schreiben.?

War es hilfreich?

Lösung

Nein, es nicht. Wenn es um die Sprache selbst kommt, einer der Python Prinzipien Kern ist nur eine Möglichkeit zu haben, etwas zu tun. Der Schalter ist redundant:

if x == 1:
    pass
elif x == 5:
    pass
elif x == 10:
    pass

(ohne den Durchfall, natürlich).

Der Schalter wurde ursprünglich als Compiler-Optimierung eingeführt für C. Modernen Compiler nicht mehr benötigen diese Hinweise, diese Art von Logik-Anweisung zu optimieren.

Andere Tipps

Versuchen Sie stattdessen:

def on_function(*args, **kwargs):
    # do something

def off_function(*args, **kwargs):
    # do something

function_dict = { '0' : off_function, '1' : on_function }

for ch in binary_string:
   function_dict[ch]()

Sie können auch eine Liste Verständnis oder Generator Ausdruck verwenden, wenn die Funktionen Werte zurückgeben:

result_list = [function_dict[ch]() for ch in binary_string]

else-if schlechte Praxis, da sie unsicher sind, wenn sie zu lang und beinhalten unnötige bedingte Verzweigungen (möglicherweise beeinflussen Compiler / Caching).

try this ...

class Functions():
    @staticmethod
    def func():
        print("so - foo")
    @staticmethod
    def funcWithArgs( junk ):
        print(junk, "foo")

# fill in your cases here...
cases = {
    "a" : Functions.func ,
    "b" : Functions.funcWithArgs ,
    "c" : Functions.funcWithArgs
}

def switch( ch, cases, *args ):
    try:
        len(*args)  # empty args
    except TypeError:
        return cases[ ch ]( )
    return cases[ ch ]( *args )

# try out your switch...
switch("a", cases)  # "so - foo"
switch("b", cases, "b -")  # "b - foo"
switch("c", cases, "c -")  # "c - foo"
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top