web-dev-qa-db-fra.com

importation de plusieurs fonctions à partir d'un module Python

J'importe beaucoup de fonctions d'un module

Est-il préférable d'utiliser

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

ce qui est un peu désordonné, mais évite d'inonder l'espace de noms actuel avec tout ce module ou

from my_module import *

Ce qui semble bien rangé mais remplira l'espace de noms avec tout ce module.

Je ne trouve rien dans PEP8 sur la limite de la quantité à importer par nom. Quel est le meilleur et pourquoi?

36
Jim Jeffries

Si vous avez vraiment besoin de tant de fonctions, vous polluez déjà votre espace de noms.

Je voudrais suggerer:

import my_module

Ou, si mon_module a un nom long, utilisez un alias:

import my_long_module as m
42
Kugel

Si c'est entre l'un ou l'autre, utilisez

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

Voir "Explicit vaut mieux qu'implicite". dans import this.

Si vous voulez juste un nom plus court que my_module.function1, Il y a toujours import my_module as mod.

Pour les quelques fonctions que vous utilisez plusieurs fois (tapez plusieurs fois pour avoir un nom court ou dans une boucle pour que la vitesse d'accès soit importante), il y a

func1 = my_module.function1
20
agf

Avec un peu de gestion, vous pouvez contrôler ce qui importe * importe. Supposons que votre my_module possède function1..function8 mais que vous souhaitez uniquement rendre les fonctions 1 à 6 disponibles. Dans votre my_module, réaffectez le __all__ attribut:

mon_module.py:

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

def function1():
   ...

# etc...

Maintenant, si vous utilisez from my_module import *, vous n'importerez que les fonctions et variables que vous avez définies dans __all__ attribut de my_module.py.

9
Manny D