2012-05-19 19 views
5

Todos los documentos de Python que he leído parecen indicar, aparte de los efectos secundarios, que si importa el módulo A y luego la referencia A.a, está haciendo referencia a la misma variable como si hubiera escrito "de A import a a".¿Por qué desde ... la importación parece vincularse al valor en tiempo de importación en Python?

Sin embargo, ese no parece ser el caso aquí y no estoy seguro de lo que está pasando. Estoy usando Python 2.6.1.

Si creo un alpha.py módulo:

bravo = None 

def set_bravo(): 
    global bravo 
    bravo = 1 

A continuación, cree un script que importa el módulo:

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 

entonces consigo esta salida:

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

Por qué ¿es eso?

Respuesta

5

from ... import ... siempre se une de inmediato, incluso si un import anterior sólo se importa el módulo/paquete.

EDIT:

contraste lo siguiente:

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. Pensé que 'importar' nombres de variables importados de un módulo al espacio de nombres local, pero parece que enlaza el mismo nombre en el espacio de nombres local con el * valor * de la variable importada. No estoy seguro si eso es poco convincente o si soy demasiado cojo para darme cuenta de que no es así. –

+2

Correcto. Python no tiene "variables" per se, solo "nombres". –

Cuestiones relacionadas