web-dev-qa-db-fra.com

Est-ce que Python a-t-il un équivalent à 'commutateur'?

J'essaie de vérifier chaque index dans une chaîne binaire à 8 chiffres. Si c'est '0' alors c'est 'OFF' sinon son 'ON'.

Y a-t-il un moyen plus concis d'écrire ce code avec une fonction de commutation??

25
AME

Non ça ne le fait pas. En ce qui concerne la langue elle-même, l'un des principaux Python Principes est de n'avoir qu'un moyen de faire quelque chose. L'interrupteur est redondant sur:

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

(Sans l'automne, bien sûr).

L'interrupteur a été introduit à l'origine comme une optimisation du compilateur pour C. Les compilateurs modernes n'ont plus besoin de ces conseils pour optimiser ce type d'instruction logique.

32
Soviut

sinon, si c'est une mauvaise pratique, puisqu'ils sont dangereux quand ils deviennent trop longs et impliquent une ramification conditionnelle inutile (peut-être affecter le compilateur/la mise en cache).

essaye ça...

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"
1
Jason