Python fournit deux façons courantes d'importer des modules :importetfrom ... importCes deux méthodes présentent des différences significatives en matière d'utilisation, de gestion des espaces de noms, de lisibilité et de problèmes potentiels. Ces aspects seront expliqués en détail ci-dessous.
1. Utilisation
import module:
- Importe le module entier.
- Lors de l'utilisation, les objets du module doivent être accessibles via le nom du module.
Exemple
result = math.sqrt(16)
print(result) # Sortie 4.0
from module import name:
- Importe des objets spécifiques (fonctions, classes, variables, etc.) depuis un module.
- Lors de l'utilisation, référencez directement l'objet importé sans le préfixe du nom du module.
Exemple
result = sqrt(16)
print(result) # Sortie 4.0
2. Gestion des espaces de noms
import module:
- Importe le module entier en tant qu'objet dans l'espace de noms actuel.
- Les objets du module sont accessibles via
module.nameaccès, et n'entrera pas en conflit avec d'autres objets dans l'espace de noms actuel.
from module import name:
- Importe des objets du module directement dans l'espace de noms actuel.
- Peut provoquer des conflits de noms avec d'autres objets dans l'espace de noms actuel.
Exemple
from cmath import sqrt # sqrt pour les nombres complexes
result = sqrt(-1) # La fonction sqrt utilisée peut prêter à confusion
print(result)
3. Lisibilité et maintenabilité
import module:
- Dans le code, il est clair quels objets proviennent de quel module car le préfixe du nom du module est toujours utilisé.
- Améliore la lisibilité et la maintenabilité du code.
Exemple
current_directory = os.getcwd()
print(current_directory) # Affiche le répertoire de travail actuel
from module import name:
- Dans le code, les noms d'objets sont utilisés directement, ce qui rend difficile de voir de quel module ces objets proviennent.
- Davantage de commentaires ou de documentation sont nécessaires pour garder le code clair.
Exemple
current_directory = getcwd()
print(current_directory) # Affiche le répertoire de travail actuel
4. Import sélectif et utilisation de la mémoire
import module:
- Importe le module entier, donc tous les objets du module sont disponibles.
- Convient lorsque plusieurs objets du module sont nécessaires.
from module import name:
- Importe uniquement des objets spécifiques du module, ce qui économise de la mémoire.
- Convient lorsque seulement quelques objets du module sont nécessaires.
Exemple
from datetime import date
today = date.today()
print(today) # Affiche la date actuelle
5. Importation de tous les objets
from module import *:
- Importe tous les objets du module dans l'espace de noms courant.
- Peut provoquer des conflits de nommage, réduire la lisibilité du code et n'est pas recommandé.
Exemple
print(sqrt(16)) # Utiliser directement la fonction sqrt
Problèmes potentiels :
Exemple
from cmath import *
result = sqrt(-1) # Il n'est pas clair de quel module la fonction sqrt est utilisée
print(result)
Résumé
import module: Convient lorsque l'ensemble du module est nécessaire, évite les conflits de noms et améliore la lisibilité du code.from module import name: Convient lorsque seuls certains objets du module sont nécessaires, simplifie le code, mais attention aux conflits de noms.from module import *: À éviter autant que possible ; cela peut causer des conflits de noms et de la confusion dans le code.
Le choix de la méthode d'importation appropriée dépend du cas d'utilisation et des exigences spécifiques. Il est généralement recommandé d'utiliser l'importinstruction lorsqu'il est nécessaire d'éviter les conflits de noms et de garder le code clair, et d'utiliser l'from ... importinstruction lorsqu'il est nécessaire de simplifier le code et d'utiliser des objets spécifiques.