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

import math

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

from math import sqrt

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 viamodule.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 math import sqrt
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

import os

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

from os import getcwd

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

# Il suffit d'utiliser l'objet date de datetime
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

from math import *

print(sqrt(16))  # Utiliser directement la fonction sqrt

Problèmes potentiels :

Exemple

from math import *
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.