码迷,mamicode.com
首页 > 编程语言 > 详细

基础入门_Python-模块和包.setdefaultencoding前为何要reload(sys)?

时间:2016-09-28 19:48:37      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:python   基础入门   

简单说明:

说明: 多次重复使用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   基础入门   

原文地址:http://xmdevops.blog.51cto.com/11144840/1857444

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!