一、模块的循环导入问题
解决方案一:把循环导入的语句放到名字定义的后面
例如:
M1.py M2.py
print(‘正在导入m1’) print('正在导入m2')
x=‘m1’ y='m2'
from m2 import y from m1 import x
解决方案二:将循环导入语句放到函数内
m1.py
print('正在导入'm1)'
def f1(): from m2 import y,f2
print('m1.f1---->y: ' ,y)
f2() x='m1'
二、区分python文件的俩种用途
当文件被执行时__name__=='__main__' 当文件被导入时__name__=='模块名'
三、模块的搜索路径1
模块搜索路径的优先级
1. 内存中已经加载过的
2. 内置模块
3. sys.path # 第一个值是当前执行文件所在的文件夹
方案一:
import sys
sys.path.append(r'文件路径')
print(sys,path)
方案二:
from 文件夹名字 import 要取的模块
环境变量是以当前执行文件为准的
强调:所有被导入的模块参照环境变量sys.path都是以执行文件为准的
四、绝对导入和相对导入
绝对导入: 以执行文件的sys.path为起始点开始导入,称之为绝对导入
优点: 执行文件与被导入的模块中都可以使用
缺点: 所有导入都是以sys.path为起始点,导入麻烦
相对导入: 参照当前所在文件的文件夹为起始开始查找,称之为相对导入 # 符号: .代表当前所在文件的文件加,..代表上一级文件夹,...代表上一级的上一级文件夹
优点: 导入更加简单
缺点: 只能在导入包中的模块时才能使用,不能在执行文件中用