web-dev-qa-db-fra.com

Comment déclarez-vous une constante globale en Python?

Je souhaite effectuer des calculs lourds au démarrage de mon programme, puis sauvegarder le résultat (une grosse matrice inégale) en mémoire afin de pouvoir l'utiliser encore et encore. Mon programme contient plusieurs fichiers et classes et j'aimerais pouvoir accéder à cette variable de n'importe où et si possible la définir comme constante.

Comment définissez-vous une constante globale en Python?

12
cjm2671

Vous pouvez simplement déclarer une variable au niveau du module et l'utiliser dans le module en tant que variable global. Vous pouvez également l'importer dans d'autres modules.

#mymodule.py
GLOBAL_VAR = 'Magic String' #or matrix...

def myfunc():
    global GLOBAL_VAR
    #do something

Ou dans d'autres modules:

from mymodule import GLOBAL_VAR
16
Mátyás Kuti

Je ne pense pas que la réponse marquée comme bonne résout la question op. Le mot clé global en Python permet de modifier une variable globale dans un contexte local ( comme expliqué ici ). Cela signifie que si l'opération modifieSOME_CONSTANT dans myfunc, la modification affectera également en dehors de l'étendue de la fonction (globalement). 

Ne pas utiliser le mot clé global au début de myfunc est plus proche du sens de constante globale que celui suggéré. Malgré cela, il n’existe aucun moyen de faire une constante de variable en Python.

17
SpKel

Il n'y a aucun moyen de déclarer une constante en Python. Vous pouvez simplement utiliser

SOME_CONSTANT = [...]

Si le nom du fichier où il est déclaré est file1.py, vous pouvez y accéder à partir d'autres fichiers de la manière suivante:

import file1

print file1.SOME_CONSTANT

En supposant que les deux fichiers se trouvent dans le même répertoire.

2
Christian

Je ne suis pas sûr de ce que vous entendez par «constante globale»; parce qu'il n'y a pas de constantes dans Python (il n'y a pas de "protection des données", toutes les variables sont accessibles).

Vous pouvez implémenter un modèle singleton pattern , mais vous devrez le régénérer à l'exécution à chaque fois.

Votre autre option sera de stocker les résultats dans un magasin externe (par exemple, redis) accessible à partir de tous les processus.

En fonction de la taille de votre ensemble de données, son stockage externe dans un K/V rapide tel que redis peut également améliorer les performances.

Vous devrez toujours le transformer et le charger, car redis ne saurait pas ce qu’est un tableau numpy (bien qu’il ait de nombreux types complexes que vous pouvez exploiter).

0
Burhan Khalid