988 votes

Incrémentation d'un entier en Python avec ++.

J'ai toujours ri en regardant mes journées en VB6 et en pensant "Quel langage moderne ne permet pas d'incrémenter avec des signes doubles plus ?

number++

À ma grande surprise, je ne trouve rien à ce sujet dans la documentation de Python. Dois-je vraiment me soumettre à number = number + 1 ? Les gens n'utilisent-ils pas le ++ / -- la notation ?

10 votes

Pour ma part, je suis très heureux que nous n'ayons pas à supporter des choses telles que a[i] = i++; où l'ordre d'évaluation en C++ est indéfini.

3 votes

Même si une telle chose existe, je pense qu'en Python l'ordre est bien défini. ( docs.python.org/reference/expressions.html#evaluation-order )

5 votes

Les réponses à vos questions dans l'ordre donné : "Erlang, Python, Lua etc" (pour "moderne" signifiant après la création du C) ; "Non" ; et "Pas nécessairement".

1720voto

Daniel Stutzbach Points 20026

Python ne supporte pas ++ mais vous pouvez le faire :

number += 1

119 votes

Je pense que l'explication de @Thomas est plus utile ici ; je pense que la question est plutôt de type why et non what .

1 votes

D'accord avec @rickcnagy, plutôt du genre "comment le faire ?". (si vous ne vous souciez vraiment pas de la brièveté du code, vous pourriez aussi simplement faire nombre = nombre + 1) le raisonnement sur la raison pour laquelle ++ et -- n'existent pas en Python semble plus utile.

7 votes

Pas exactement. Les éléments suivants ne fonctionneront pas comme prévu : progress = 0; print(progress += 1) . Donc += ne semble pas remplacer complètement l'approche C++. ++ opérateur.

528voto

Thomas Wouters Points 38811

En clair, le ++ y -- Les opérateurs n'existent pas en Python car ils ne seraient pas opérateurs il faudrait qu'ils soient déclarations . Toute modification d'espace de nom en Python est une déclaration, pour des raisons de simplicité et de cohérence. C'est l'une des décisions de conception. Et comme les entiers sont immuables, la seule façon de "modifier" une variable est de la réaffecter.

Heureusement, nous disposons de merveilleux outils pour les cas d'utilisation suivants ++ y -- dans d'autres langues, comme enumerate() y itertools.count() .

22 votes

Référence utile pour enumerate() y itertools.count()

2 votes

Pouvez-vous suggérer une solution de remplacement élégante ? reserved_index = 0; col_names = [name if name != '_' else 'reserved' + (reserved_index++) for name in column_names] ? On me passe une liste de noms de colonnes où certaines qui ne sont pas intéressantes sont juste '_' . J'ai besoin de construire une table temporaire avec ces '_' remplacés par des noms uniques mais non significatifs. L'opérateur de postincrémentation in-place rendrait cela facile ; j'ai du mal à trouver quelque chose d'autre qui n'implique pas de boucler explicitement sur le tableau.

6 votes

@Tom reserved_indices = itertools.count(); col_names = [name if name != '_' else 'reserved' + str(next(reserved_indices)) for name in column_names]

63voto

knutin Points 3325

Vous pouvez le faire :

number += 1

25voto

Mike Graham Points 22480

La principale raison pour laquelle ++ est utile dans les langages de type C est de garder la trace des indices. En Python, vous traitez les données de manière abstraite et vous incrémentez rarement les indices et autres. La chose la plus proche de l'esprit de ++ est le next méthode des itérateurs.

2 votes

Parfois, je trouve que vous avez vraiment besoin d'index d'itération, par exemple si vous voulez savoir combien de fois une fonction s'exécute avant de converger, etc. Bien que cela compte peut-être encore comme "rarement utilisé", Python est assez bien adapté pour la plupart du temps au codage scientifique, FWIW.

19voto

compie Points 3773

Vous pouvez utiliser :

number += 1

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