7.2 Importer des noms
Objectifs d'apprentissage
À la fin de cette section, vous devriez être capable de :
- Importer des fonctions depuis un module à l'aide du mot-clé
from. - Expliquer comment éviter une collision de noms lors de l'importation d'un module.
Le mot-clé from
Des fonctions spécifiques d'un module peuvent être importées à l'aide du mot-clé from :
from area import triangle, cylinder
Ces fonctions peuvent être appelées directement, sans faire référence au module :
print(triangle(1, 2))
print(cylinder(3, 4))
Pour aller plus loin
Comme illustré ci-dessous, le mot-clé from peut conduire à des noms ambigus.
Concepts en pratique
Le mot-clé from
Collisions de noms
Des modules écrits par différents programmeurs peuvent utiliser le même nom pour une fonction. Une collision de noms (name collision) se produit lorsqu'une fonction est définie plusieurs fois. Si une fonction est définie plus d'une fois, la définition la plus récente est utilisée :
from area import cube
def cube(x): # Name collision (replaces the imported function)
return x ** 3
print(cube(2)) # Calls the local cube() function, not area.cube()
Un programmeur pourrait ne pas se rendre compte que la fonction cube est définie deux fois car aucune erreur ne se produit lors de l'exécution du programme. Les collisions de noms ne sont pas considérées comme des erreurs et conduisent souvent à un comportement inattendu.
Il convient d'être vigilant pour éviter les collisions de noms. Sélectionner des fonctions spécifiques à importer depuis un module réduit l'empreinte mémoire ; cependant, importer un module complet peut aider à éviter les collisions car les noms sont alors qualifiés sous la forme module.name. C'est un compromis que le programmeur doit prendre en compte.
Concepts en pratique
Collisions de noms
Pour aller plus loin
Si un nom est défini, importé ou affecté plusieurs fois, Python utilise la définition la plus récente. D'autres langages permettent à plusieurs fonctions d'avoir le même nom si les paramètres sont différents. Cette fonctionnalité, appelée surcharge de fonction, ne fait pas partie du langage Python.
À vous d'essayer
Importations manquantes
Ajoutez les instructions import manquantes en haut du fichier. N'apportez aucune modification au reste du code. Au final, le programme devrait s'exécuter sans erreur.
À vous d'essayer
Cadeaux de fête
Le programme suivant ne s'exécute pas correctement en raison de collisions de noms. Corrigez le programme en modifiant les instructions import, les appels de fonction et les affectations de variables. La sortie devrait être :
Bouncy ball area: 13
Bouncy ball volume: 4
Cone hat area: 227
Cone hat volume: 209