Cet article présente principalement l'explication détaillée de la différence entre import reload __import__ en Python. Les amis qui en ont besoin peuvent se référer à
import<.>
Fonction : Importer/introduire un module standard python, comprenant des fichiers .py et des répertoires avec des fichiers __init__.py (modules personnalisés).import module_name[,module1,...] from module import *|child[,child1,...]
#!/usr/bin/env python #encoding: utf-8 import os print 'in pythontab',id(os)
#!/usr/bin/env python #encoding: utf-8 import pythontab #第一次会打印pythontab里面的语句 import os #再次导入os后,其内存地址和pythontab里面的是一样的,因此这里只是对os的本地引用 print 'in c',id(os) import pythontab #第二次不会打印pythontab里面的语句,因为没有重新加载
import os reload(os)
#!/usr/bin/env python #encoding: utf-8 import os print 'in pythontab',id(os)
#!/usr/bin/env python #encoding: utf-8 import pythontab #第一次import会打印pythontab里面的语句 print id(pythontab) #原来pythontab的内存地址 reload(pythontab) #第二次reload还会打印pythontab里面的语句,因为有重新加载 print id(pythontab) #reload后pythontab的内存地址,和原来一样
#!/usr/bin/env python #encoding: utf-8 import sys #引用sys模块进来,并不是进行sys的第一次加载 reload(sys) #重新加载sys sys.setdefaultencoding('utf8') ##调用setdefaultencoding函数
#!/usr/bin/env python #encoding: utf-8 import sys sys.setdefaultencoding('utf8')
#!/usr/bin/env python #encoding: utf-8 import sys reload(sys) sys.setdefaultencoding('utf8') del sys.setdefaultencoding ##删除原来的setdefaultencoding函数 sys.setdefaultencoding('gb2312')
__import__
Fonction : La même fonction que l'instruction import, mais __import__ est une fonction et seulement elle reçoit une chaîne en paramètre, donc sa fonction peut être imaginée. En fait, l'instruction import appelle cette fonction pour effectuer le travail d'importation import sys <==>sys = __import__('sys')Utilisez :<🎜. >
__import__(module_name[, globals[, locals[, fromlist]]]) #可选参数默认为globals(),locals(),[] __import__('os') __import__('os',globals(),locals(),['path','pip']) #等价于from os import path, pip
Habituellement, cette fonction peut être utilisée lors du chargement dynamique. Par exemple, si vous souhaitez charger les modules utilisés dans un certain dossier, mais que les noms des modules en dessous changeront fréquemment. , vous pouvez utiliser cette fonction pour charger dynamiquement tous les modules. Le scénario le plus courant est la prise en charge des fonctions de plug-in.
Extension :
Étant donné que les modules peuvent être importés dynamiquement via des chaînes, les modules peuvent-ils être rechargés dynamiquement via des chaînes ? Essayez reload('os') pour signaler une erreur directement. N'y a-t-il pas d'autre moyen ? Bien que vous ne puissiez pas recharger directement, vous pouvez d'abord désimporter un module, puis __import__ pour recharger le module. Voyons maintenant comment l'opération de désimportation est implémentée. Dans l'interprétation Python, vous pouvez afficher les modules chargés dans l'environnement actuel et leurs emplacements via globals(), locals(), vars(), dir() et d'autres fonctions, mais celles-ci ne peut être visualisé que par Supprimer, il ne peut donc pas être désimporté ; cependant, il existe un autre endroit spécifiquement pour stocker les modules, qui est sys.modules, vous pouvez afficher tous les modules chargés et réussis, et il y en a plus que des globaux. , indiquant que la valeur par défaut Certains modules supplémentaires seront chargés et que l'étape suivante consiste à annuler l'importation.
#!/usr/bin/env python #encoding: utf-8 import sys __import__('a') #第一次导入会打印消息 del sys.modules['a'] #unimport __import__('a') #再次导入还是会打印消息,因为已经unimport一次了 __import__('a') #这次就不会打印消息了
Résumé
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!