Importation de modules à partir de variables de chaîne à l'aide de "__import__" : différences par rapport aux instructions d'importation normales
En Python, l'importation La fonction permet d'importer dynamiquement des modules à partir d'une variable chaîne. Cependant, cela peut conduire à des résultats inattendus par rapport à l'utilisation d'instructions d'importation régulières.
Considérons l'exemple suivant :
import matplotlib.text as text x = dir(text) # Get attributes of matplotlib.text i = __import__('matplotlib.text') y = dir(i) # Get attributes of the imported module j = __import__('matplotlib') z = dir(j) # Get attributes of matplotlib
Une comparaison des listes résultantes révèle que l'objet y contient un mélange de attributs de matplotlib et matplotlib.text, alors qu'il lui manque les informations souhaitées sur les classes principales de matplotlib.text.
Ce comportement s'explique par le Mécanisme de la fonction import. Par défaut, il importe le module de niveau supérieur spécifié par l'argument chaîne. Dans ce cas, "matplotlib.text" fait référence au module matplotlib.text, mais import importe matplotlib à la place.
Pour résoudre ce problème, vous pouvez fournir une chaîne vide comme troisième argument à __import__, comme le montre le code modifié suivant :
i = __import__('matplotlib.text', fromlist=['']) y = dir(i) # Get attributes of matplotlib.text
Cela entraînera import pour importer spécifiquement le module matplotlib.text, ce qui donne y contenant la liste d'attributs souhaitée.
Une approche alternative consiste à utiliser le module importlib de Python 3.1 :
import importlib i = importlib.import_module("matplotlib.text") y = dir(i) # Get attributes of matplotlib.text
Cette méthode fournit un moyen plus cohérent et plus simple d'importer des modules à partir d'une chaîne variables.
Remarque :
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!