python核心编程笔记--模块的导入

 1. 模块的重新导入

有这样的一种情况:我们首先创建了一个.py文件,输入模块代码。保存后,我们进入ipython3的环境,引入这个模块。然后再ipython3环境外修改这个模块文件,在ipython3的环境中引入的模块文件会不会相应发生变化?

答案是:不会同步发生变化,需要重新引入

示例过程如下:

1.1 打开终端,新建一个.py文件,并简单输入一个print语句:

1.2 新开一个终端,在同一个目录输入ipython3命令,并引入test.py模块,进行测试

1.3 在原来创建test.py的终端修改test.py文件,此时ipython3的窗口不能关闭

1.4 再在之前的ipython3的窗口里,调用模块中的方法,看是否输出second

 

结论是:外层修改后,没有同步发生变化,由上图可以看出,在未关闭的情况下,即便是重新再引入一遍,还是没有同步改变。

解决方法

a. 需要关闭impyhon3环境,重新导入

b. 使用reload

 

关于reload的用法,它属性imp模块,文档详情如下图所示:

 

至于为什么需要reload(),我们可以理解为,IPython3在第一次import的时候会去找你import的模块文件,然后就会把它放在某个地方,这样下次就不会再去找了。因此如果在外层修改了,里面是没有读取到修改后的文件的。

大家可以思考下,如果先打开一个IPyhon3的环境,然后重新打开一个终端,在相同目录新建一个模块文件,再回到之前打开的IPython3环境,我们可以直接import刚刚新建的模块吗?[根据上面的解释,显然是可以的,可以动手尝试下]

 2. 关于python中引入模块文件方式的说明

当我们输入import 模块文件名 时,python是怎么找到模块文件的?如果找不到,python会报No modeule named '模块文件名'的错误

在ipython3的环境下,引入sys模块,里面有个变量,叫sys.path。这个变量是一个列表,它每一个元素存储的就是模块搜索的路径。搜索顺序是按结果顺序。

 

如果我们想在其他目录加入模块,则可以sys.path.append('目录')即可。即如果想对搜索路径做任何操作,比如修改顺序,添加目录,都只需要对sys.path(列表)操作即可。

目录路径以 / 开着

相对目录不以 / 开头

 

3. 模块的循环导入

a模块中引入了b,b模块中引入了a,结果会怎样?

答案是会报错

解决办法:抽取一个模块,专门用来调用,需要a就调用a,需要b就调用b

posted on 2018-01-04 11:24  DemonFS  阅读(232)  评论(0编辑  收藏  举报

导航