Atteindre un modoki d'énumération sans utiliser d'énumération

Je me suis demandé si les définitions de variables suivantes pouvaient être rendues intelligentes, alors j'ai pris note. Veuillez commenter si vous dites "il y a une meilleure façon".

STYLE_RED = 1
STYLE_BLUE = 2
STYLE_GREEN = 3
STYLE_YELLOW = 4
 :

Je parle de "use enum", mais comme enum ne peut pas être utilisé par défaut dans la série Python 2.7, j'aimerais faire quelques astuces pour le réaliser. (Pour la série Python 2.7, un backport de la fonction enum appelée enum34 est également fourni)

point

Ces définitions de variables sont souvent ajoutées et supprimées au cours du développement, et il est souvent nécessaire de décaler toutes les valeurs dans la dernière partie, en particulier lors de l'ajout d'une nouvelle définition entre des variables définies.

STYLE_RED = 1
SYTLE_BLACK = 2  #Je veux vraiment l'ajouter ici en tant que 2
STYLE_BLUE = 3   #Décaler la valeur dans la dernière étape
STYLE_GREEN = 4  #C'est aussi..
STYLE_YELLOW = 5 #C'est aussi...
 :

La question est de savoir si une telle addition / suppression peut ou non être effectuée rapidement.

Comment utiliser le tapple

Comme ça.

(
    RED,
    BLUE,
    GREEN,
    YELLOW,
) = range(0, 4)

print 'Color RED: %d' % RED

Puisque les valeurs ne sont pas spécifiées individuellement, il n'est pas nécessaire de décaler à chaque fois en ajoutant une variable, mais le deuxième argument de la fonction range () doit être changé en même temps.

(
    RED,
    BLACK,  #ajouter à
    BLUE,
    GREEN,
    YELLOW,
) = range(0, 5)  # 4->Changer en 5

En utilisant tapple, cela devient une variable invariante, donc c'est très utile en fonction de l'application. Il ressemble à une énumération, et vous pouvez le traiter séquentiellement en lui donnant un nom.

COLORS = (
    RED,
    BLUE,
      :
) = range(0, ...)

Attribuer lors de l'incrémentation de la valeur à l'aide d'une variable

Puisque l'opération ++ ne peut pas être utilisée en Python, l'implémentation suivante n'est pas possible.

int colorVal = 0
int RED = colorVal++;
int BLUE = colorVal++;
  :

Si vous faites cela en Python, cela ressemblera (probablement) à ceci:

_cv = 0
RED = _cv = (_cv + 1)
BLUE = _cv = (_cv + 1)
GREEN = _cv = (_cv + 1)
YELLOW = _cv = (_cv + 1)

Puisque le côté droit est la même expression, il est facile d'ajouter des variables. Cependant, le code n'a pas l'air intelligent de toute façon, donc je pense personnellement que la méthode d'utilisation des tapples est semblable à Python. (Il est préférable d'utiliser enum docilement)

Recommended Posts

Atteindre un modoki d'énumération sans utiliser d'énumération
Calcul de l'excédent sans utiliser le%
Tri à bulles sans utiliser le tri
Écrivez FizzBuzz sans utiliser "="
Tri rapide sans utiliser le tri
Correction gamma sans utiliser OpenCV