Maison >développement back-end >Tutoriel Python >Pourquoi devriez-vous éviter « importer * » en Python ?

Pourquoi devriez-vous éviter « importer * » en Python ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-15 19:26:02586parcourir

Why Should You Avoid `import *` in Python?

Découvrir les secrets de l'importation * en Python

En Python, l'énigmatique commande "import *" accorde un accès sans précédent aux ressources d'un module. Il importe non seulement le module désigné, mais également le précieux fichier __init__.py résidant dans le dossier contenant. En conséquence, le module béni __init__.py devient partie intégrante de l'espace de noms actuel.

Déclarer à partir de project.model

Avec le pouvoir d'importation , la nécessité de déclarer explicitement "from project.model import __init__" s'évapore. Un simple "from project.model import " suffit pour englober tout ce qui se trouve à la fois dans le module project.model et dans son sacré fichier __init__.py.

Avantages et inconvénients de l'importation *

Le L'attrait de import * réside dans sa capacité à importer tous les objets nommés (à l'exception de ceux commençant par un trait de soulignement) d'un module désigné dans l'espace de noms actuel. Cela permet d'accéder sans tracas à tout objet importé sans avoir à préfixer son nom avec l'identifiant du module.

Par exemple, considérons l'extrait suivant :

from math import *

Cette incantation magique nous permet pour exercer de manière transparente la puissance de pi sans aucune connaissance préalable :

pi
3.141592653589793

Cependant, l'immense pouvoir d'importation * a un prix. Cela met en évidence les dangers des collisions d’espaces de noms, écrasant potentiellement les variables existantes dans la portée actuelle. De plus, cela peut s'avérer inefficace si le module cible héberge une pléthore d'objets. Enfin, et c'est peut-être le plus important, il étouffe la nature auto-documentée du code, laissant l'origine des variables, des méthodes et des classes entourée de mystère.

Une approche plus propre

Par conséquent, le sage parmi nous, réservez import * pour les tests ad hoc et préférez des alternatives plus explicites pour le code de production. Un choix prudent consiste à importer explicitement uniquement les objets souhaités :

from math import pi

Alternativement, importer l'intégralité du module sous un espace de noms distinct peut être un compromis judicieux :

import math as m

Ce qui se cache dans l'importation *

Pour percer les mystères de l'import*, il est impératif d'en comprendre les rouages. Par défaut, il importe tous les objets nommés (à l'exclusion de ceux commençant par un trait de soulignement). Cependant, si le module désigné définit une variable all, la priorité est donnée et seuls les noms énumérés dans cette variable sont importés.

Sous-modules et importation *

De nombreuses bibliothèques Python standards sont organisées en sous-modules, comme urllib.request, l'extension omniprésente du module urllib. Il est important de noter que import * from urllib ne traversera pas ces salles sacrées ; des instructions d'importation distinctes sont nécessaires pour y accéder :

from math import *

Conclusion

Les humbles commandes import * exercent un pouvoir immense, offrant la possibilité d'importer le contenu d'un module entier dans l'espace de noms actuel. Cependant, c’est un pouvoir qui doit être utilisé avec prudence, de peur que les dangers des collisions d’espaces de noms, de l’inefficacité et du manque d’auto-documentation ne nous attrapent. Pour le code de production, des pratiques d'importation plus explicites et structurées sont la voie vers la tranquillité et la clarté.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn