web-dev-qa-db-fra.com

Python - Meilleure / Meilleure façon de définir des listes constantes ou des dictionnaires

Premier utilisateur sur débordement de pile et je suis ravi d'être ici.

INTRO: J'ai récemment commencé l'aventure magique dans le monde de la programmation Python - j'adore. Maintenant, tout s'est bien passé dans ma transition maladroite de C, mais j'ai du mal à créer quelque chose qui être synonyme d'un fichier HEADER (.h).

PROBLÈME: J'ai des dictionnaires et des listes de taille moyenne (environ 1 000 éléments), de longs énumérations et "#defines" (enfin pas vraiment), mais je ne trouve pas de moyen PROPRE de les organiser tous. En C, je les jetterais tous dans un fichier d'en-tête et je n'y repenserais jamais, cependant, en Python ce n'est pas possible ou du moins je pense.

SOLUTION SALINE ACTUELLE: J'initialise toutes les variables CONSTANTES en haut du MODULE ou de la FONCTION (module si plusieurs fonctions en ont besoin).

CONCLUSION: Je serais éternellement reconnaissant si quelqu'un avait trouvé un moyen d'organiser PROPREMENT les variables constantes.

MERCI SO BEAUCOUP!

30
TSmith

Mettez vos constantes dans leur propre module:

# constants.py

RED = 1
BLUE = 2
GREEN = 3

Importez ensuite ce module et utilisez les constantes:

import constants

print "RED is", constants.RED

Les constantes peuvent être n'importe quelle valeur que vous aimez, j'ai montré des entiers ici, mais les listes et les dictés fonctionneraient tout de même.

21
Ned Batchelder

Habituellement, je fais cela:

Fichier: constants.py

CONSTANT1 = 'asd'
CONSTANT_FOO = 123
CONSTANT_BAR = [1, 2, 5]

Fichier: your_script.py

from constants import CONSTANT1, CONSTANT_FOO
# or if you want *all* of them
# from constants import *

...

Maintenant, vos constantes sont dans un seul fichier et vous pouvez les importer et les utiliser facilement.

9
Blender

Créez un fichier séparé constants.py, et y mettre toutes les constantes pertinentes à l'échelle mondiale. Ensuite vous pouvez import constants pour les appeler constants.SPAM ou faites le (discutable) from constants import * pour les désigner simplement comme SPAM ou EGGS.

Pendant que nous sommes ici, notez que Python ne prend pas en charge les constantes constant. La convention consiste simplement à les nommer dans ALL_CAPS et promets de ne pas les muter.

3
tsm