importación de múltiples funciones desde un módulo Python


Estoy importando muchas funciones de un módulo

Es mejor usar

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

Que es un poco desordenado, pero evita inundar el espacio de nombres actual con todo desde ese módulo o

from my_module import *

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

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

Author: Jim Jeffries, 2011-07-20

4 answers

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

Yo sugeriría:

import my_module

O, si mi_modulo tiene un nombre largo, use un alias:

import my_long_module as m
 35
Author: Kugel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-20 12:25:32

Si está entre uno u otro, use

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

Ver "Lo explícito es mejor que lo implícito."en import this.

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

Para las pocas funciones que usa muchas veces (escriba muchas veces para que desee un nombre corto o en un bucle para que la velocidad de acceso sea importante), hay

func1 = my_module.function1
 10
Author: agf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-20 13:05:07

Con un poco de gestión puedes controlar qué import * importa. Digamos que tu my_module tiene function1..function8 pero solo desea que las funciones 1 a 6 estén disponibles. En tu my_module, reasigna el atributo __all__:

My_module.py:

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

def function1():
   ...

# etc...

Ahora, si usa from my_module import *, solo importará las funciones y variables que definió en el atributo __all__ desde my_module.py.

 6
Author: Manny D,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-20 12:31:24

Sugiero que resuelvas el problema dividiendo tu módulo agrupando las funciones apropiadamente y poniéndolas en módulos separados.

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

 -2
Author: Johannes Charra,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-20 12:29:56