L'importation d'une longue liste de constantes pour un fichier Python
En Python, est-il un analogue de la C
préprocesseur l'énoncé?:
#define MY_CONSTANT 50
Aussi, j'ai une grande liste de constantes j'aimerais importer à plusieurs classes. Est-il un analogue de déclarer les constantes comme une longue séquence d'instructions comme ci-dessus dans un .py
fichier et l'importer dans un autre .py
fichier?
Modifier.
Le fichier Constants.py
lit:
#!/usr/bin/env python
# encoding: utf-8
"""
Constants.py
"""
MY_CONSTANT_ONE = 50
MY_CONSTANT_TWO = 51
Et myExample.py
lit:
#!/usr/bin/env python
# encoding: utf-8
"""
myExample.py
"""
import sys
import os
import Constants
class myExample:
def __init__(self):
self.someValueOne = Constants.MY_CONSTANT_ONE + 1
self.someValueTwo = Constants.MY_CONSTANT_TWO + 1
if __name__ == '__main__':
x = MyClass()
Modifier.
Du compilateur,
NameError: "nom global
'MY_CONSTANT_ONE" n'est pas défini"fonction init dans myExample à la ligne
13 auto.someValueOne =
Les constantes.MY_CONSTANT_ONE + 1 copie
sortie Programme terminé avec le code #1
après de 0,06 secondes.
- Non, il n'y a pas de préprocesseur. Et non, vous n'irez pas très loin en essayant de code C en Python, ou même essayer de trouver des parallèles.
- Ce n'est pas la pleine de sperme. La façon dont vous exécutez?
python myExample.py
devrait donner un traceback sur l'erreur qui comprend les noms de fichier et<module>
haut niveau. De Plus,MY_CONSTANT_ONE
n'est pas références comme un nom global - vraiment bizarre. Triple-vérifier que ceux qui sont vraiment les fichiers que vous êtes en cours d'exécution (et peut-être de les convertir en ASCII et de la bande de la# encoding: utf8
bits). - Merci, j'ai l'impression de bien maintenant, pas encore sûr de savoir pourquoi, mais jamais l'esprit :).
Vous devez vous connecter pour publier un commentaire.
Python n'est pas analysée. Il vous suffit de créer un fichier
myconstants.py
:Et de les importer tout fonctionne:
MAX_FIVE_FLUSH_KEY_INT
). Post le traceback.Constants.py
bien. Et même si c'était le cas, cela n'explique pas pourquoi et comment il pense que leMY_CONSTANT_ONE
dansConstants.MY_CONSTANT_ONE
était un nom global.Python n'a pas de préprocesseur, ni-t-il des constantes dans le sens qu'ils ne peuvent pas être changé, vous pouvez toujours changer (presque, vous pouvez émuler constante des propriétés de l'objet, mais de le faire pour le bien de constant-ness est rarement fait et pas jugé utile) tout. Lors de la définition d'une constante, nous définissons un nom en majuscules avec des traits de soulignement et l'appeler un jour - "Nous sommes tous des adultes consentants ici", aucun homme sain d'esprit serait de modifier une constante. Sauf si bien sûr, il a de très bonnes raisons et sait exactement ce qu'il fait, dans ce cas, vous ne pouvez pas (et ne devrait probablement pas) d'arrêter de lui de toute façon.
Mais bien sûr, vous pouvez définir un niveau module nom de la valeur et de l'utiliser dans un autre module. Ce n'est pas spécifique à des constantes ou quoi que ce soit, de lire sur le système de module.
Et bien sûr vous pouvez faire:
import *
est du diable.Bien sûr, vous pouvez mettre votre constantes dans un module séparé. Par exemple:
const.py:
main.py:
Noter que, comme déclaré ci-dessus,
A
,B
etC
sont variables, c'est à dire peut être modifié au moment de l'exécution.Comme une alternative à l'utilisation de l'approche d'importation décrit dans plusieurs réponses, ont un coup d'oeil un configparser module.
La ConfigParser classe implémente une configuration de base d'un analyseur de fichier de langue qui fournit une structure similaire à ce que vous trouverez sur Microsoft Windows, les fichiers INI. Vous pouvez l'utiliser pour écrire des programmes Python qui peuvent être personnalisés par les utilisateurs finaux facilement.
Essayez de regarder Créer des constantes à l'aide d'un "paramètres" module? et Puis-je empêcher la modification d'un objet en Python?
Un autre lien utile: http://code.activestate.com/recipes/65207-constants-in-python/ nous dit à propos de l'option suivante:
Vous pouvez donc créer une classe comme ça, et puis de l'importer à partir de vous contants.py le module. Cela vous permettra d'être sûr que la valeur ne serait pas modifié, supprimé.
Si vous voulez vraiment des constantes, et pas seulement les variables de la recherche comme des constantes, le standard de la façon de le faire est d'utiliser immuable dictionnaires. Malheureusement, il n'est pas intégré, de sorte que vous avez à utiliser un tiers des recettes (comme cette une ou que l'on).