问题记录:import和from...import在实际使用中注意的事项

在使用python中我们会使用importfrom...import...对模块进行导入,但在实际中我们可能会遇到如下问题:
尤其在多个文件中引入同一个模块并对该模块的参数进行操作时,会存在如下问题

  1. import模块导入路径问题
  2. 重新导入模块问题
  3. 一个模块被多个文件使用并对模块的参数进行修改时,会存在部分操作无效的情况

具体说明如下:

1.路径问题

import等类似语句导入模块的默认路径是按照sys.path中的文件路径执行的。sys.path打印结果为一个元组,这个元组中文件路径顺序即为import某一个文件的文件查找顺序--由前到后的查找。

# sys.path打印结果:其中''指当前路径。
['', 
'C:\\Users\\luo\\AppData\\Local\\Programs\\Python\\Python36\\python36.zip',
'C:\\Users\\luo\\AppData\\Local\\Programs\\Python\\Python36\\DLLs',
'C:\\Users\\luo\\AppData\\Local\\Programs\\Python\\Python36\\lib', 
'C:\\Users\\luo\\AppData\\Local\\Programs\\Python\\Python36',
'C:\\Users\\luo\\AppData\\Local\\Programs\\Python\\Python36\\lib\\site-packages']

当已经安装某个模块无法导入时可以使用sys.path.append('/home/itcast/xxx')方法添加文件查找路径。
当某个文件导入不是自己安装的模块时,可以使用sys.path.insert(0, '/home/itcast/xxx'), 可以确保先搜索这个路径插入最头部,保证优先查找

2. 重新导入模块问题

模块被导入后,import module不能重新导入模块,重新导入需用reload。

即分为两个部分:
1.import导入模块只会导入一次,因此即使模块进行了修改,import也不会重新导入。如果要重新导入,需要使用reload模块。执行操作如下:

from imp import reload
reload(模块名)   # 模块被重新导入

2.一个模块在一个文件中如果被多次导入时,python解释器只会按照第一个次导入该模块的位置执行,之后导入的语句不执行。

3. 多模块导入问题

当使用from...import...导入某一个函数或者变量时,其实已经对该部分进行了一个复制。当后续对该部分进行修改时,并不影响原本文件中的参数。所以就会有多个文件对导入模块的参数进行修改时,最终执行的结果并不如预想到的。
解决这个办法是使用import xxx导入整个文件,在执行中使用xxx.a()的方式进行操作,这样操作的实际数据就是模块下的参数。
PS:这在一个模块被多个文件导入时,需要尤其的注意,避免踩坑!

猜你喜欢

转载自www.cnblogs.com/achjiang/p/9945053.html