2012-09-25 32 views
6

¿Hay alguna diferencia, sutil o no tan sutil, entre los efectos de las siguientes instrucciones de importación? He encontrado ambos utilizados en programas de ejemplo y, por supuesto, ambos parecen funcionar. Sería contra corriente de "solo hay una manera de hacer cosas" si fueran totalmente equivalentes en función, así que estoy desconcertado. Estoy empezando en Python y tratando de mantener buenos hábitos. Así, por ejemplo, para el módulo de interpolación en el paquete scipy ...Manera pitónica de importar módulos de paquetes

from scipy import interpolate as spi 

o

import scipy.interpolate as spi 

ambos parecen poner el módulo de interpolación en el espacio de nombres actual como spi

Respuesta

0

Es una cuestión de gusto, de verdad.

En este caso particular, yo usaría import scipy.interpolate as spi, para recordar que interpolate es un submódulo de scipy. Si tuviera que importar una función de un módulo, usaría from module import function.

Lo único es que sea coherente con la convención que elija.

+0

Prefiero la versión "import package.module as shortname", pero me pregunto si el "módulo de importación de paquetes" tiene algo que recomendar. No "desde la función de importación de módulos", ya sea que lo cambie de nombre o no, ya que me gusta tener visibilidad del módulo y el nombre de la función en mi código. Por lo tanto, parece que "import full_module_name como shortname", ya sea full_module_name tenga un prefijo de paquete o no, es la forma consistente de hacerlo. Utilizo un conjunto consistente de nombres cortos, que parecen surgir en muchas fuentes: np, sp, tk, plt por ejemplo, npr para numpy.random, etc. –

10

No, no hay no hay diferencia entre las dos declaraciones, ambas ponen exactamente el mismo objeto en el espacio de nombres de su módulo (globals()), con el mismo nombre.

Lo hacen de maneras ligeramente diferentes, pero el resultado final es el mismo.

En esencia, la primera hace:

from scipy import interpolate 
spi = interpolate 
del interpolate 

y el segundo se reduce a

import scipy.interpolate 
spi = scipy.interpolate 
del scipy 

y al final todo lo que tienes es el nombre spi con destino a la función interpolate.

En lo personal, no me cambie el nombre de la función de esa manera, me lo guardo como import scipy y uso scipy.interpolate, comunicando claramente que el objeto proviene de todo el Código, o que haría uso de from scipy import interpolate.

Cambiar el nombre del objeto puede hacer que sea más fácil escribir para usted, pero puede hacer que le resulte más difícil a usted u otros asimilar más adelante cuando vuelva a visitar este código después de meses de ausencia.

+0

Debería haber dejado en claro que la interpolación era el módulo, no la función. Termino usando f = spi.interp1d (... –

+0

@Neil_UK: el comentario todavía se aplica, ya sea que sea un módulo o una función. :-) Se ajustó la redacción. –

Cuestiones relacionadas