Maison > développement back-end > Tutoriel Python > En quoi « __import__ » de Python diffère-t-il de « import » standard lors de l'importation de modules à partir de variables de chaîne ?

En quoi « __import__ » de Python diffère-t-il de « import » standard lors de l'importation de modules à partir de variables de chaîne ?

Patricia Arquette
Libérer: 2024-12-05 05:39:09
original
978 Les gens l'ont consulté

How Does Python's `__import__` Differ from Standard `import` When Importing Modules from String Variables?

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
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

Cette méthode fournit un moyen plus cohérent et plus simple d'importer des modules à partir d'une chaîne variables.

Remarque :

  • Lors de l'importation à partir de sous-dossiers (par exemple, ./feature/email.py), la syntaxe importlib devient importlib.import_module(" feature.email").
  • Avant Python 3.3, la présence d'un fichier __init__.py dans le dossier était nécessaire pour les importations utilisant importlib.import_module.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal