2014-06-10 20 views
5

Ho alcuni calcoli pesanti che voglio fare all'avvio del mio programma, e poi voglio salvare il risultato (una grande matrice sconnessa) in memoria in modo che possa usarlo ancora e ancora. Il mio programma contiene più file e classi e mi piacerebbe poter accedere a questa variabile da qualsiasi luogo e, se possibile, definirlo come costante.Come si dichiara una costante globale in Python?

Come si definisce una costante globale in Python?

risposta

10

È possibile dichiarare una variabile solo a livello di modulo e utilizzarla nel modulo come variabile global. Puoi anche importarlo su altri moduli.

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

def myfunc(): 
    global GLOBAL_VAR 
    #do something 

O in altri moduli:

from mymodule import GLOBAL_VAR 
1

Non esiste alcun modo per dichiarare una costante in Python. Si può semplicemente utilizzare

SOME_CONSTANT = [...] 

Se il nome del file in cui viene dichiarata è file1.py, allora si può accedere ad esso da altri file nel seguente modo:

import file1 

print file1.SOME_CONSTANT 

Supponendo che entrambi i file si trovano nella stessa directory.

-1

io non sono sicuro di cosa si intende per 'costante globale'; perché non ci sono costanti in Python (non esiste una "protezione dati", tutte le variabili sono accessibili).

È possibile implementare un singleton pattern, ma sarà necessario rigenerarlo in fase di runtime ogni volta.

L'altra opzione è quella di archiviare i risultati in un archivio esterno (come diciamo, redis) che è accessibile da tutti i processi.

A seconda di quanto è grande il set di dati, memorizzarlo esternamente in un veloce K/V come redis potrebbe offrire anche un aumento delle prestazioni.

Dovresti comunque trasformarlo e caricarlo, poiché i redis non saprebbero cosa sia un array numpy (anche se ha many complex types che puoi sfruttare).

8

Non credo che la risposta contrassegnata come buona risolva l'interrogativo. La parola chiave global in Python viene utilizzata per modificare una variabile globale in un contesto locale (as explained here). Ciò significa che se l'op modificaSOME_CONSTANT all'interno di myfunc, la modifica interesserà anche all'esterno dello l'ambito della funzione (globalmente).

Non usando la parola chiave global all'inizio del myfunc è più vicino al senso di globale costante rispetto a quello suggerito. Nonostante non ci siano mezzi per rendere costante una variabile in Python.

Problemi correlati