Python语言中 import 与 reload 的使用问题

<span style="font-size:18px;">import sys, time
reload(sys)
sys.setdefaultencoding('utf-8')
from pyspark import SparkContext
from pyspark.streaming import StreamingContext

from pyspark.sql import SQLContext, Row
from pyspark.sql.types import *

from pyspark.sql import HiveContext


***************
***************
***************</span>


对于这块代码的开始首先导入sys, time,

然后再reload(sys)看似是重复操作,但是在后面的代码中,

当python格式的模板(它就是使用__import__来导入模板的)被导入后,然后进行了修改,

如何重新导入使其生效呢。那么就可以使用reload来实现。


<span style="font-size:18px;">dirname = os.path.dirname(os.path.abspath(modulename))
        filename, ext = os.path.splitext(os.path.basename(modulename))
        if ext.lower() != ‘.py’:
            return {}, {}
        if sys.modules.has_key(filename):
            mod = sys.modules[filename]
            reload(mod)
        else:
            if dirname:
                sys.path.insert(0, dirname)
            mod = __import__(filename)
            if dirname:
                del sys.path[0]</span>


这段代码是用来导入一个python的文件,你传给一个字符串格式的python文件名,

如果有目录则将其插入到sys.path中,最后再删除。如果在sys.modules已经存在此模块,

说明以前导入过,则调用reload重新装入,否则是一个未导入过的模块,可以使用__import__进行导入。




import和reload的使用注意事项

由于某种原因,一旦人们知道通过import和reload运行文件,有些人就会倾向于仅使用这个方法,

而忽略了能够运行最新版本的代码的其他选择(例如,图标点击、IDLE菜单选项以及系统命令行)。

这会让人变得困惑:你需要记住是何时导入的,才能知道能不能够reload,你需要记住当调用reload时

需要使用括号,并且要记住让代码的最新版本运行时首先要使用reload。此外,reload是不可传递的,

重载一个模块的话只会重载该模块,而不能够重载该模块所导入的任何模块,因此,有时候必须reload

多个文件。


你可能感兴趣的:(Python语言中 import 与 reload 的使用问题)