Ventajas de `from foo import spam` sobre` from foo import * `[duplicate]

Posible duplicado:
¿Debe evitarse la importación de comodines?

¿Qué ventajas tiene from foo import spam oferta sobre from foo import * aparte de no importar todas las funciones?

¿Ahorra memoria? ¿O es solo azúcar sintáctico pero en realidad importa todo? ¿Dónde puedo encontrar más información al respecto?

Si ahorra memoria, ¿cómo funciona?

preguntado el 02 de febrero de 12 a las 11:02

from foo import * importará todo en foo: variables globales, métodos, clases, incluye que foo incluye, mientras from foo import spam solo importará spam. Imagine un módulo con cientos de variables y métodos; solo desea importar spam para detener los conflictos de nombres y ayudar con el rendimiento y el uso de la memoria -

Para responder a una pregunta específica (NO es una exacto duplicado): En cuanto a la memoria, no hace ninguna diferencia. El proceso de importación es exactamente el mismo, pero el proceso de vinculación posterior es la diferencia. -

4 Respuestas

Contaminar el espacio de nombres global con nombres que no importa explícitamente es una mala idea. Hace que sea imposible saber de dónde se importaron los nombres que usa más adelante en su código sin ir y leer la fuente de cada módulo que se ha importado, y corre el riesgo de que dos módulos usen los mismos nombres, lo que probablemente romperá las cosas.

Respondido 02 Feb 12, 15:02

La importación * importaría todo lo presente en foo, mientras que el spam de importación solo importaría los atributos requeridos.

Es como tener variables / métodos sin usar en el código. Si comienza a calificar su código usando algo como pylint, tener variables y métodos sin usar reduce la calificación

Respondido 02 Feb 12, 15:02

Si necesita todo o la mayor parte de foo luego from foo import * es mejor, pero si solo necesitas spam luego from foo import spam haría el trabajo por ti.

Respondido 02 Feb 12, 15:02

Aparte de otras razones, una cosa es la importancia de la forma: from foo import spam ayuda es que mejora la legibilidad del código. Al observar la declaración anterior, queda claro qué dependencia tiene el módulo actual con el módulo foo.

Respondido 02 Feb 12, 15:02

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.