662 votes

Quel est l'équivalent en Python d'une déclaration de cas/commutation ?

Existe-t-il un équivalent Python pour la fonction switch déclaration ?

28 votes

Depuis la version 3.10 de Python, vous pouvez utiliser la fonction match ... case la syntaxe : PEP 636 .

22 votes

Python 3.10.0 fournit un équivalent syntaxique officiel, ce qui fait que les réponses soumises ne sont plus les solutions optimales ! Sur ce poste SO J'essaie de couvrir tout ce que vous pourriez vouloir savoir sur la match - case construire, y compris pièges communs si vous venez d'autres langues. Bien sûr, si vous n'utilisez pas encore Python 3.10.0, les réponses existantes s'appliquent et sont toujours valables pour 2021.

1 votes

J'aurais bien écrit ceci dans une réponse à ce post, mais malheureusement, il ne permet pas d'autres réponses. Mais avec plus d'un million de vues, je pense que cette question doit au moins être redirigée vers une réponse plus moderne - surtout lorsque la version 3.10.0 sera stable et que les débutants en Python tomberont sur cet article.

831voto

Prashant Kumar Points 5220

Python 3.10 et plus

Dans Python 3.10, ils ont introduit la fonction filtrage par motif .

Exemple de la Documentation Python :

def http_error(status):
    match status:
        case 400:
            return "Bad request"
        case 404:
            return "Not found"
        case 418:
            return "I'm a teapot"

        # If an exact match is not confirmed, this last case will be used if provided
        case _:
            return "Something's wrong with the internet"

Avant Python 3.10

Alors que le documentation officielle sont heureux de ne pas fournir switch J'ai vu un solution à l'aide de dictionnaires .

Par exemple :

# define the function blocks
def zero():
    print "You typed zero.\n"

def sqr():
    print "n is a perfect square\n"

def even():
    print "n is an even number\n"

def prime():
    print "n is a prime number\n"

# map the inputs to the function blocks
options = {0 : zero,
           1 : sqr,
           4 : sqr,
           9 : sqr,
           2 : even,
           3 : prime,
           5 : prime,
           7 : prime,
}

Alors l'équivalent switch est invoqué :

options[num]()

Cela commence à s'effondrer si vous dépendez fortement de l'automne.

39 votes

Le dictionnaire doit venir après les définitions des fonctions

0 votes

@MortezaLSC, vous n'avez pas besoin des guillemets si vous faites correspondre des entiers à des fonctions.

0 votes

@Prashant Kumar, j'utilise python 2.7.6 et j'ai eu une erreur ! +1

238voto

Lennart Regebro Points 52510

Le remplacement direct est if / elif / else .

Cependant, dans de nombreux cas, il existe de meilleures façons de le faire en Python. Voir " Remplacement de l'instruction switch en Python ? ".

0 votes

C'est ce que j'ai fini par faire. Je pense que le filtrage ne fonctionne pas avec les chaînes de caractères.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X