模块的循环导入问题

run.py执行文件

# import m1 # 第一次导入


# 验证解决方案一:
'''
正在导入m1
正在导入m2
'''
# print(m1.x)
# print(m1.y)

# 验证解决方案二:
import m1 # 第一次导入

'''
正在导入m1
'''

# print(m1.x)
# print(m1.f1)
m1.f1()
'''
正在导入m2
m1.f1---->y:m2
m2.f2--->x:m1
'''


m1.py模块文件

# 错误示范
'''
print('正在导入m1')
from m2 import y #第一次导入m2

x='m1'
'''

# 解决方案一: 把循环导入的语句放到名字定义的后面
# print('正在导入m1')
#
# x='m1'
#
# from m2 import y #第一次导入m2

# 解决方案二: 将循环导入语句放到函数内

print('正在导入m1')

def f1():
from m2 import y,f2 #第一次导入m2
print('m1.f1---->y: ',y)
f2()
x='m1'

m2.py模块文件

# 错误示范
'''
print('正在导入m2')
from m1 import x

y='m2'
'''
# 解决方案一: 把循环导入的语句放到名字定义的后面

# print('正在导入m2')
#
# y='m2'
#
# from m1 import x

# 解决方案二: 将循环导入语句放到函数内
print('正在导入m2')

def f2():
from m1 import x
print('m2.f2--->x: ',x)

y='m2'

区分python文件的两种用途

run.py执行文件

import m1

def f1():
print('f1')

def f2():
print('f2')

m1.py模块文件

#当文件被执行时__name__=='__main__'
#当文件被导入时__name__=='模块名'
# print(__name__)

# if __name__ == '__main__':
# f1()
# f2()

 模块的搜索路径

# 模块搜索路径的优先级
# 1. 内存中已经加载过的
# 2. 内置模块
# 3. sys.path # 第一个值是当前执行文件所在的文件夹

 

绝对导入与相对导入

# 绝对导入: 以执行文件的sys.path为起始点开始导入,称之为绝对导入
# 优点: 执行文件与被导入的模块中都可以使用
# 缺点: 所有导入都是以sys.path为起始点,导入麻烦

# 相对导入: 参照当前所在文件的文件夹为起始开始查找,称之为相对导入
# 符号: .代表当前所在文件的文件加,..代表上一级文件夹,...代表上一级的上一级文件夹
# 优点: 导入更加简单
# 缺点: 只能在被导入的模块中使用,不能在执行文件中用

软件开发的目录规范

posted on 2019-02-21 20:32  Andy_ouyang  阅读(82)  评论(0编辑  收藏  举报