2013-08-03 9 views

risposta

6

semplicemente riassegnare la variabile nel modulo:

import myfunc 
from myfunc import print_a 

a = 10 

print a 

myfunc.a = a 

print_a() 

Altrimenti non è possibile.

Rememeber che i moduli Python tratta in un modo che è molto diverso da C. Il import in python non non "copiare il contenuto" del file in quel luogo, ma esegue il codice dato il file e crea un oggetto module.

La variabile globale del modulo sono gli attributi dell'oggetto module, che possono essere modificati come ho mostrato. Non esiste una nozione come "variabile globale" tranne per i built-in.


io suggerirei di refactoring il codice in modo tale che non è necessario modificare questa variabile globale a tutti, spostando il codice che utilizza myfunc.amain1-myfunc. Il fatto che tu abbia bisogno di una variabile globale di questo tipo è già un odore di codice che c'è qualcosa che non va nel tuo codice e dovresti provare a risolverlo.


in realtà c'è un modo per influenzare la "portata globale", ma è così hackish che non voglio nemmeno parlarne. Fidati di me: non vuoi usarlo. Se le persone vedono il tuo codice usando un tale trucco potresti essere in pericolo fisico.

+3

+1 per "pericolo fisico". – Matthias

+0

Ma OP vuole usare la stessa variabile 'a' da' main1', non solo vederne una copia –

+0

@RyanHaining Dove vedi una "copia"? Nel mio esempio aggiungo/modifica semplicemente un * riferimento *, che non implica la copia di qualcosa in modo che le modifiche alla variabile in un modulo siano viste nell'altro modulo asweel, tranne quando l'oggetto è immutabile (nel qual caso non si dovrebbe cura per l'identità comunque). – Bakuriu

1

A differenza di C, le variabili dichiarate in ambito globale sono ancora di portata limitata modulo vengono creati in, quindi è necessario qualificare il nome a con il modulo in cui vive.

Il global parola chiave viene utilizzata quando si sta andando a modificare una variabile globale riassegnando, non è necessario quando si fa riferimento a una variabile globale.

Se si sta tentando di accedere a una variabile di un altro file, è necessario importare quel modulo, e per il modo in cui i file sono strutturati avete un paio di modi per risolvere i problemi:

Opzione 1) Spostare il referenziamento di myfunc.print_a all'interno di una funzione e import main1 all'interno myfunc vedere a

main1.py

import myfunc 

a = 10 

def main(): 
    print a  
    myfunc.print_a() 

if __name__ == '__main__': 
    main() 

myfunc.py

import main1 

def print_a(): 
    print main1.a 

opzione 2) raccomandato Spostare la variabile (s) in un altro modulo e hanno entrambi myfunc e main1 importarlo.

vals.py

a = 20 

main1.py

import vals 
from myfunc import print_a 

vals.a = 10 

print vals.a  
print_a() 

myfunc.py

import vals 

def print_a(): 
    print vals.a