2011-01-21 10 views

Respuesta

13

Suena como uno más de la multitud de buenas razones para no usar from toolsmodule import *.

Si acaba de hacer import toolsmodule, entonces puede hacer toolsmodule.database = 'foo', y todo es maravilloso.

+2

Sé de esto, pero uso estas variables mucho, tengo nombres de módulo largos, y me gustaría evitar el tipeo adicional. – David

+12

Por lo tanto, haga que los nombres de los módulos sean cortos: 'import longnamename como asname'. Ahora 'sname' se referirá a' longmodulename'. – user225312

+4

Si no desea escribir 'toolsmodule' cada vez, puede hacer lo siguiente:' import toolsmodule as tm'. De esta forma, mantendrá su espacio de nombres en forma y guardará la escritura. – miku

1

¿Por qué no hacerlo así:

import toolsmodule 
toolsmodule.database = "foo" 
from toolsmodule import * #bad idea, but let's say you have to.. 
print database #outputs foo 
+0

Cuando probé esto, creo que terminé sin poder modificar la variable desde el módulo de herramientas más. Esto necesita ser verificado. – David

7

pitones nombres de variables son sólo etiquetas de variables. Cuando import * todas esas etiquetas son locales y cuando luego configura la base de datos, simplemente reemplaza la variable local, no la que está en el módulo de herramientas. Por lo tanto, hacer esto:

toolsmodule.py:

database = "original" 

def printdatabase(): 
    print "Database is", database 

Y a continuación, ejecute:

import toolsmodule 
toolsmodule.database = "newdatabase" 
toolsmodule.printdatabase() 

La salida es

Database is newdatabase 

Tenga en cuenta que si, a continuación de otro modulo TAMBIÉN hizo un import * el cambio no se refleja.

En resumen: NUNCA use from x import *. No sé por qué todos los novatos persisten en hacer esto a pesar de que toda la documentación que conozco dice que es una mala idea.

Cuestiones relacionadas