2011-07-20 29 views
22

Estoy importando una gran cantidad de funciones de un móduloimportación de múltiples funciones de un módulo de Python

¿Es mejor utilizar

from my_module import function1, function2, function3, function4, function5, function6, function7 

que es un poco desordenado, pero evita la inundación del espacio de nombres actual con todo, desde ese módulo o

from my_module import * 

Lo que parece ordenado pero llenará el espacio de nombres con todo lo de ese módulo.

No se puede encontrar nada en PEP8 sobre cuál es el límite de cuánto debe importar por nombre. ¿Cuál es mejor y por qué?

Respuesta

29

Si realmente necesita tantas funciones, ya está contaminando su espacio de nombres.

que sugeriría:

import my_module 

O, si mi_módulo tiene un nombre largo usar un alias:

import my_long_module as m 
-2

Sugiero a resolver el problema mediante la división de su módulo mediante la agrupación de las funciones de forma adecuada y ponerlo en módulos separados.

El enfoque de Kugel's alias también está bien, aunque no recomendaría usar un alias como "m". : O)

9

si es entre uno u otro, utilice

from my_module import function1, function2, function3, function4, function5, function6, function7 

Ver "Explícito es mejor que implícito." en import this.

Si solo desea un nombre más corto que my_module.function1, siempre hay import my_module as mod.

Para las pocas funciones que utiliza muchas veces (ya sea de tipo muchas veces por lo que desea un nombre corto o en un bucle así que la velocidad de acceso es importante), no es

func1 = my_module.function1 
4

Con un poco de gestión que puede controlar qué importa * importa Digamos que my_module tiene function1..function8 pero solo quiere que las funciones 1 a 6 estén disponibles. En su mi_módulo, vuelva a asignar el atributo __all__:

my_module.py:

__all__ = ['function1', 'function2', 'function3' ...] 

def function1(): 
    ... 

# etc... 

Ahora bien, si se utiliza from my_module import *, sólo va a importar esas funciones y variables que ha definido en el atributo de __all__ mi_módulo. py.

+0

¿Qué ocurre si el módulo es un módulo incorporado o de un tercero que no puede o no desea editar? –

+0

Entonces probablemente no podría/no debería hacer esto. Asumí por el nombre del archivo que era algo que estaba creando. –

+0

@MannyD - eso es correcto, sin embargo, en otros lugares de mi código necesito importar function9..functionN –

Cuestiones relacionadas