Maison > développement back-end > Tutoriel Python > Comparaison des différences entre import et __import__() en Python

Comparaison des différences entre import et __import__() en Python

不言
Libérer: 2018-09-20 16:09:46
original
2998 Les gens l'ont consulté

Cet article vous propose une comparaison des différences entre import et __import__() en Python. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il vous sera utile.

Parlons d'abord de la différence entre les deux :

La commande import fait deux choses : 1) Rechercher un module, 2) Se lier à des variables locales
Intégré function_ _import__() ne fait qu'une seule chose : rechercher le module

Pendant l'exécution de l'instruction d'importation, __import__() est appelée pour terminer la récupération du module.

Le processus de recherche de modules :

Avant de comprendre le processus de recherche, comprenons d'abord plusieurs rôles dans l'implémentation interne :
a) Le module recherché existera dans un Dans le cache des modules (sys.modules).
b) finders | importateurs : utilisés pour rechercher où se trouve le module. Après l'avoir trouvé, la spécification du module est renvoyée (y compris des informations telles que l'endroit où se trouve le module, quel chargeur doit être utilisé pour le charger, etc.) .
Les chercheurs sont trouvés à partir du module intégré et les importateurs sont trouvés à partir d'autres emplacements.
Les importateurs sont extensibles et peuvent prendre en charge certains chemins, zips et URL dans le système de fichiers.
c) chargeurs : charger selon modulespec pour générer le module en python

module = modulespec.loader.load_module(modulespec.name)
Copier après la connexion

Le processus de recherche est le suivant :

1) Si le nom du module à rechercher est dans le cache (modules sys.), effectuez les opérations suivantes :
1.1) Si la valeur est None, lancez ModuleNotFoundError
1.2) La valeur n'est pas None, retournez directement la valeur
2) Trouvez-la depuis le module intégré par les chercheurs, mais il est introuvable. L'importateur le recherche, mais les importateurs ne le trouvent pas. Le nom du module est mis en cache, la valeur est None, puis ModuleNotFoundError est déclenché.
Lorsque vous utilisez les importateurs pour effectuer une recherche, si vous trouvez .pyc, vous devez d'abord vérifier si .pyc est le dernier.
Après avoir trouvé, revenez générer et créer une spécification de module
3) Le chargeur dans la spécification de module charge et exécute le module :

module = modulespec.loader.load_module(modulespec.name)
sys.modules[modulespec.name] = module
modulespec.loader.exec_module(module)
Copier après la connexion

4) Enfin, il n'est pas trouvé, enregistrez Le nom du module est mis en cache, la valeur est None, puis ModuleNotFoundError

est déclenché.

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!

Étiquettes associées:
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal