模块、包
一、模块
二、包
三、编程思想
四、目录规范
一、模块
1.循环导入
# 两个文件彼此导入彼此 循环导入的时候极有可能出现某个名字还没有被创建就使用的情况导致报错 如果确实需要循环导入 那么需要确保双方使用的名字都必须'提前定义好' 方式1:将导入模块的句式写在定义名字的下面 方式2:将导入模块的句式写在函数体代码内
2.判断文件类型
#py文件可以被分为两种类型 1.执行文件 2.被导入文件(模块) #内置变量__name__可以判断文件的类型 当__name__所在的文件是执行文件的时候 结果是__main__ 当__name__所在的文件是被导入文件时候 结果是文件名(模块名) #可以用__name__区分被导入的代码和测试代码 if __name__ == '__main__': 当前文件是执行文件的时候才会执行的子代码块 #__name__有快捷键,main按tab
3.模块的查找顺序
#1.先从内存空间中查找 #2.再从内置模块中查找 #3.最后去sys.path查找
3.1验证从内存空间中查找
3.2验证从内置模块中查找
#创建py文件时取名不要和模块名冲突
3.3验证sys.path
#其实sys.path是一个列表,里面存放了很大路径,第一个路径就是执行文件所在的路径
4.解决py文件执行时查找不到模块
#1.将模块文件路径主动添加sys.path路径 import sys sys.path.append(r'D:\py\day17\dd') import mdd print(mdd.name) #2.利用from...import...句式指名道姓的查找 from dd import mdd # 从文件夹dd中导入mdd模块 print(mdd.name) from aaa.bbb.ccc import mm # 通过点的方式进入下一层目录 print(mm.name)
5.绝对导入和相对导入
#1.绝对导入 按照文件所在的路劲一层层的查找模块所在的位置 #from aaa import dd #2.相对导入 相当导入打破了必须参照执行文件的所在路径的要求 只需要考虑当前模块所在的路径然后使用特殊符号.去查找其他模块即可 from . import bb # 当前文件内查找a 相对导入只能在被导入文件中使用 不能在执行文件中使用 """ .表示当前路径 ..表示上一层路径 ../..表示上上一层路径 """
二、包
# 包的含义 1.包就是内部含有__init__.py的文件夹 2.包就是多个模块的结合体(内部存放了多个模块文件) # 在pycharm中甚至直接提供了创建包的选项 本质就是文件夹里面有一个__init__.py文件 #在导入包的时候 索要名字其实是跟包里面的__init__.py要 1.如果想直接通过包的名字使用包里面所有的模块 那么需要在__init__.py中提前导入 2.也可以直接忽略__init__的存在使用绝对导入即可
三、编程思想演变
#1.小白阶段 此阶段写代码就是在一个文件内不停地堆叠代码的行数 #2.函数阶段 此阶段写代码我们学会了将一些特定功能的代码封装到函数中供后续反复调用 #3.模块阶段 此阶段不单单是将功能代码封装成函数,并且将相似的代码功能拆分到不同的py文件中便于后续的管理
四、软件开发目录规范
#1.bin文件夹 存放程序的启动文件 start.py #2.conf文件夹 存放程序的配置文件 settings.py #3.core文件夹 存放程序的核心业务 src.py 就是最为重要的代码 能够实现具体需求 #4.lib文件夹 存放程序公共的功能 common.py #5.db文件夹 存放程序的数据 userinfo.txt #6.log文件夹 存放程序的日志记录 log.log #7.readme文本文件 存放程序的说明、广告等额外的信息 #8.requirements.txt文本文件 存放程序需要使用的第三方模块及对应的版本