Importation de modules à partir de variables de chaîne avec l'import
Dans le domaine de la programmation Python, on peut rencontrer le besoin pour importer des modules dynamiquement en fonction de variables de chaîne. Cependant, cette approche peut donner des résultats inattendus par rapport aux déclarations d'importation traditionnelles. Dans cet article, nous approfondissons le fonctionnement interne de la fonction import de Python et élucidons les différences entre ces deux approches.
Considérons le scénario suivant : nous souhaitons obtenir une liste des classes principales de un sous-module de la bibliothèque matplotlib. Pour ce faire, on tente de charger le sous-module à partir d'une chaîne en utilisant __import__ :
import matplotlib.text as text x = dir(text) i = __import__('matplotlib.text') y = dir(i)
Quand on compare les listes 'x' et 'y', on découvre que 'y' contient des éléments inattendus non présents dans 'x'. Cela suggère que import charge des informations supplémentaires dont nous n'avons pas besoin.
La clé pour comprendre ce comportement réside dans le paramètre fromlist de import__. Par défaut, ce paramètre est une liste vide, qui demande à __import de charger tous les attributs disponibles à partir du module spécifié. Pour remédier à ce problème, nous devons spécifier explicitement une chaîne vide ('') dans la fromlist :
i = __import__('matplotlib.text', fromlist=['']) y = dir(i)
Avec cette modification, 'i' fait désormais exclusivement référence au sous-module 'matplotlib.text', et 'y' contient la liste souhaitée des classes principales.
Alternativement, dans Python 3.1 ou version ultérieure, nous pouvons utiliser le module importlib pour obtenir le même résultat :
import importlib i = importlib.import_module("matplotlib.text") y = dir(i)
En comprenant les complexités des mécanismes d'importation de Python, nous pouvons naviguer efficacement dans les nuances du chargement des modules et garantir que nos programmes se comportent comme prévu.
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!