2012-05-19 4 views
5

Tutti i documenti Python che ho letto sembrano indicare che, a parte gli effetti collaterali, che se si importa il modulo A e si fa riferimento a A.a, si fa riferimento alla stessa variabile come se si scrivesse "da A import a".Perché da ... l'importazione sembra legarsi al valore al momento dell'importazione in Python?

Tuttavia, non sembra essere il caso qui e non sono sicuro di cosa sta succedendo. Sto usando Python 2.6.1.

Se creo un alpha.py modulo:

bravo = None 

def set_bravo(): 
    global bravo 
    bravo = 1 

Poi creare uno script che importa il modulo:

import sys, os 
sys.path.append(os.path.abspath('.')) 

import alpha 
from alpha import bravo 

alpha.set_bravo() 
print "Value of bravo is: %s" % bravo 
print "Value of alpha.bravo is: %s" % alpha.bravo 

allora ottengo questo output:

Value of bravo is: None 
Value of alpha.bravo is: 1 

Perché è questo?

risposta

5

from ... import ...sempre si lega immediatamente, anche se una precedente import importati solo il modulo/pacchetto.

EDIT:

Contrasto il seguente:

import alpha 

alpha.set_bravo() 

from alpha import bravo 

print "Value of bravo is: %s" % bravo 
print "Value of alpha.bravo is: %s" % alpha.bravo 
+0

Ah. Ho pensato di importare i nomi delle variabili importati da un modulo nello spazio dei nomi locale, ma sembra che leghi lo stesso nome nello spazio dei nomi locale al valore * * della variabile importata. Non sono sicuro che sia zoppo o sono troppo debole per capire che non lo è. –

+2

corretto. Python non ha "variabili" di per sé, solo "nomi". –

Problemi correlati