J'ai une instruction if-elif-elif-else dans laquelle, dans 99 % des cas, l'instruction else est exécutée :
if something == 'this':
doThis()
elif something == 'that':
doThat()
elif something == 'there':
doThere()
else:
doThisMostOfTheTime()
Cette construction se fait beaucoup mais comme il passe en revue chaque condition avant d'atteindre l'autre, j'ai l'impression que ce n'est pas très efficace, et encore moins pythonique. D'un autre côté, il a besoin de savoir si l'une de ces conditions est remplie, donc il devrait quand même la tester.
Quelqu'un sait-il si et comment cela pourrait être fait plus efficacement ou est-ce simplement la meilleure façon de procéder ?
0 votes
Pouvez-vous
sort
les éléments sur lesquels vous exécutez votre chaîne if/else..., de sorte que tous les éléments pour lesquels l'une des conditions correspondra se trouvent à une extrémité, et tous les autres à l'autre ? Si c'est le cas, vous pourriez voir si cela est plus rapide/plus élégant ou non. Mais rappelez-vous, s'il n'y a pas de problème de performance, il est trop tôt pour se préoccuper de l'optimisation.1 votes
Rel stackoverflow.com/questions/374239/
0 votes
@Patashu - Malheureusement, j'ai un énorme problème de performance. Ce programme fonctionne jour et nuit en analysant d'énormes quantités de données. C'est seulement parce que mes compétences en C++ ne sont pas à la hauteur (et j'adore Python) que je ne le réécris pas
4 votes
Les trois cas particuliers ont-ils quelque chose en commun ? Par exemple, vous pourriez faire
if not something.startswith("th"): doThisMostOfTheTime()
et faire une autre comparaison dans leelse
clause.0 votes
@TimPietzcker - Malheureusement, il n'y a pas vraiment quelque chose qu'ils ont en commun. Il peut s'agir de 3 nombres spécifiques ou d'une chaîne de caractères spécifique. Si c'est un autre nombre ou une autre chaîne de caractères (parmi plus de 2 000 options), il doit effectuer l'autre action.
3 votes
@kramer65 S'il s'agit d'une si longue chaîne de if/elif... ça peut être lent, mais assurez-vous d'avoir réellement... profil votre code et commencez par optimiser la partie qui prend le plus de temps.
1 votes
Ces comparaisons sont-elles effectuées une seule fois par valeur de
something
ou des comparaisons similaires sont-elles effectuées plusieurs fois sur la même valeur ?