La "ventaja" de from xyz import *
a diferencia de otras formas de importación es que importa todo (bueno, casi ... [ver (a) a continuación] todo) desde el módulo designado de conformidad con el módulo actual. Esto permite usar los diversos objetos (variables, clases, métodos ...) del módulo importado sin ponerles el prefijo.Por ejemplo
>>> from math import *
>>>pi
3.141592653589793
>>>sin(pi/2)
>>>1.0
Esta práctica (de importación * en el espacio de nombres actual) es sin embargo desalentado porque que
- ofrece la oportunidad para que las colisiones de espacio de nombres (por ejemplo, si usted tenía un nombre de variable pi antes de la importación)
- puede ser ineficaz, si la cantidad de objetos importados es grande.
- no documenta explícitamente el origen de la variable/método/clase (que es bueno tener esta "auto-documentación" del programa para la futura visita en el código)
Típicamente por lo tanto, limitar esta importación * la práctica de pruebas ad-hoc y similares, y en su lugar:
importar explícitamente unos objetos sólo
>>>from math import pi
>>>pi
>>>3.141592653589793
>>> sin(pi/2)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'sin' is not defined
o importar el mod ule bajo su propio espacio de nombres (o un alias de los mismos, en particular si este es un nombre largo, y el programa hace referencia a sus objetos muchas veces)
>>>import math
>>>math.pi
>>>3.141592653589793
etc..
>>>import math as m #bad example math being so short and standard...
>>>m.pi
>>>3.141592653589793
etc..
Véase el Python documentation on this topic
(a) Específicamente, lo que se importa con from xyz import *
si el módulo xyz define una variable __all__
, importará todos los nombres definidos en esta secuencia, de lo contrario importará todos los nombres, excepto estos que comienzan con un guión bajo.
'from yadda.yadda import *' es más útil al piratear cosas en la línea de comando de Python, p. cuando usas Python como calculadora y simplemente escribes 'from math import *'. En un módulo, está pidiendo problemas. Además, si importa un módulo de archivo único (a diferencia de un directorio), 'from ... import *' no importará símbolos cuyos nombres comiencen con '_'. –