基础入门_Python-模块和包.setdefaultencoding前为何要reload(sys)?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基础入门_Python-模块和包.setdefaultencoding前为何要reload(sys)?相关的知识,希望对你有一定的参考价值。
简单说明:
说明: 多次重复使用import语句时,不会重新加载模块,而是把该模块的内存地址给引用到本地环境变量
#!/usr/bin/env python # -*- coding: utf-8 -*- """ # # Authors: limanman # 51CTOBG: http://xmdevops.blog.51cto.com/ # Purpose: # """ # 说明: 导入公共模块 import sys try: sys.setdefaultencoding(‘utf-8‘) except Exception, e: print e reload(sys) sys.setdefaultencoding(‘utf-8‘) print sys.getdefaultencoding() # 说明: 导入其它模块 if __name__ == ‘__main__‘: pass
重新加载:
说明: 对已经加载的模块进行重新加载,一般用于原模块有变化等特殊情况,reload前该模块必须已经import过,但是需要注意的是已经使用的实例还会使用旧模块,而新产生的实例才会使用新模块,reload之后还是原来的内存地址
#!/usr/bin/env python # -*- coding: utf-8 -*- """ # # Authors: limanman # 51CTOBG: http://xmdevops.blog.51cto.com/ # Purpose: # """ # 说明: 导入公共模块 import sys try: sys.setdefaultencoding(‘utf-8‘) except Exception, e: print e reload(sys) sys.setdefaultencoding(‘utf-8‘) print sys.getdefaultencoding() # 说明: 导入其它模块 if __name__ == ‘__main__‘: pass
说明: 很多人不名为为何要reload()一下sys才能使用setdefaultencoding设置编码,其实是因为解释器初始化时预先执行了/usr/lib64/python2.7/site.py,而在其554行代码中del sys.setdefaultencoding删除了此方法,其实你import sys只是指向了那个被删除了setdefaultencoding属性的sys模块地址,所以需要重新reload一下还原此方法
本文出自 “ζ自动化运维开发之路ζ” 博客,请务必保留此出处http://xmdevops.blog.51cto.com/11144840/1857444
以上是关于基础入门_Python-模块和包.setdefaultencoding前为何要reload(sys)?的主要内容,如果未能解决你的问题,请参考以下文章
基础入门_Python-模块和包.深入Celery之应用配置/独立模块配置实践?
基础入门_Python-模块和包.setdefaultencoding前为何要reload(sys)?
基础入门_Python-模块和包.运维开发中__import__动态导入最佳实践?