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

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

不言
不言original
2018-09-20 16:09:462980parcourir

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)

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)

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!

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