模块补充和软件开发目录规范
目录
模块补充
循环导入
循环导入就是两个文件彼互相导入。循环导入的时候极有可能发现某个名字还没有被创建就使用的情况,引发报错导致程序终止。在实际编程中,尽量避免循环导入。
如果确实需要循环导入,那么需确保双方使用的名字都必须在导入前定义
方式1:先定义名字,再导入模块
方式2:将导入模块的句式写在函数体代码内

判断文件类型
py文件可以被分为两种类型
- 执行文件
- 被导入文件
内置变量__name__
当__name__所在的文件是执行文件的时候,结果是__main__
当__name__所在的文件是被导入文件时候,结果是模块名
# 创建一个md001.py文件
x = 88888
if __name__ == '__main__':
    print('loaded md001')
else:
    print('from md001')
# 创建一个执行文件导入md001.py文件
import md001
if __name__ == '__main__':
    print(md001.x)

模块的查找顺序
- 先从内存空间中查找
- 再去内置模块中查找
- 最后到sys.path查找
# 验证先从内存空间中查找
import md001
import time
time.sleep(10)  # 睡眠期间将md0011.py文件删除
print(md001.x)

# 验证从内置模块中查找
# 创建一个time.py文件
def func():
    print('this is self-defined time module')
func()
# 创建一个执行文件导入time.py文件
import time
print(time)
print(time.time())

# 验证到sys.path中查找
import sys
print(sys.path)  # 结果是一个列表,里面的元素是一个个路径
sys.path.insert(0, r'D:\PyCharm 2021\week4\day18\pkg')  # 主动添加sys.path路径
print(sys.path)
import md001

绝对导入和相对导入
绝对导入
# 创建一个md002.py文件
smile = '^^^o^^^'
if __name__ == 'qqq.www.eee.md002':
    print('from md002')
else:
    print('loaded md002')
# 创建一个执行文件导入md002.py文件
from qqq.www.eee import md002
print(md002.smile)
相对导入
# 创建一个md003.py文件
smile = '---o---'
if __name__ != '__main__':
    print('from md003')
else:
    print('loaded md003')
from . import md002
print(md002.smile)
from qqq.www.eee import md003
# 创建一个执行文件导入md003.py文件
print(md003.smile)

包

什么是包?
包就是内部含有__init__.py的文件夹
__init__方法使用
# 在pkg文件夹(与执行文件路径一致)里创建一个md001.py文件
x = 88888
if __name__ == 'md001':
    print('from md001')
# 在__init__.py中添加代码
from . import md001
# 创建一个执行文件导入pkg(包)
import pkg
print(pkg.md001.x)

软件开发目录规范
一、bin文件夹
存放程序的启动文件,例如start.py
二、conf文件夹
存放程序的配置文件,例如settings.py
三、 core文件夹
存放程序的核心业务,例如src.py
就是最为重要的代码 能够实现具体需求
四、 lib文件夹
存放程序公共的功能,例如common.py
五、 db文件夹
存放程序的数据,例如userinfo.txt,admininfo.txt
六、 log文件夹
存放程序的日志记录,例如log.log
七、 readme文本文件
存放程序的说明、广告等额外的信息
八、 requirements.txt文本文件
存放程序需要使用的第三方模块及对应的版本

 
                    
                
 
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号