''''''
'''
模块:一系列功能的结合体
三个来源: 自定义 内置 第三方
四种表现形式: py文件 一些列py文件的结合体(包) c编写连接到解释器的内置模块 编译好的共享库
用模块的原因: 提高开发效率,重复调用的方法写成模块,直接调用
用模块注意: 分清楚 执行文件 和 被导入文件
注意py文件名不应该与模块名(内置的,第三方)冲突
# import md1 # 导入模块的语法 导入多个模块,需要分开每个各写一行 导入模块写在文件开头
当模块名字比较复杂的情况下 可以给该模块名取别名 import 模块文件名 as 别名
多次导入不会重复执行,只要有名称空间就延用现有的
运行该执行文件: 创建一个该执行文件的局部名称空间
执行模块文件
将模块中执行的代码产生的名字放到模块空间
执行文件空间产生一个指向模块的名字
利用from...import...句式
缺点:
1.访问模块中的名字不需要加模块名前缀
2.在访问模块中的名字可能会与当前执行文件中的名字冲突
# 访问模块中的名字指向的值
# print(md.money) # 使用import导入模块 访问模块名称空间中的名字统一句势:模块名.名字 md.money 函数名也一样
执行文件中可以有相同的名字,但是在引用模块时是指名道姓
1.只要你能拿到函数名 无论在哪都可以通过函数加括号来调用这个函数(会回到函数定义阶段 依次执行代码)
2.函数在定义阶段 名字查找就已经固定死了 不会因为调用位置的变化而改变
__all__可以指定当前所在py文件被当做模块导入的时候,可以限制导入者能够拿到的名字个数
在当前模块文件中写 __all__ = ['名字1','名字2','名字3']
__all__ = ['money','read1','read2'] 一个列表
在模块中导入别的模块,别的模块会引用本模块后面代码还没有定义的变量而报错
如果出现循环导入问题 那么一定是你的程序设计的不合理,循环导入问题应该在程序设计阶段就应该避免
解决循环导入问题的方式
1.方式1: 将循环导入的句式写在文件最下方(),防止在导入别的模块,别的模块会引用本模块后面代码还没有定义的变量而报错
2.方式2: 定义的函数内导入模块,定义函数只检查语法不执行,函数中引用别的模块也不会立即执行,
会在程序继续跑完本模块,调用到这个函数,才会调用别的模块,
别的模块如果需要引用本模块,本模块的所有变量都已经定义了,不会报错
python为我们内置了全局变量__name__,
当文件被当做脚本执行时:__name__ 等于'__main__' 如果本文件是执行文件 __name__ 等于'__main__ 则可以执行函数
当文件被当做模块导入时:__name__等于模块名 如果本文件是模块文件 __name__等于模块文件名 只提供调用,不执行函数
#作用:用来控制.py文件在不同的应用场景下执行不同的逻辑
if __name__ == '__main__': index1()
这个意思是 如果本文件是执行文件,则运行函数,否则就是模块文件不运行函数,只提供调用
模块的查找顺序
1.先从内存中找
2.内置中找
3.sys.path中找(环境变量):
import sys
print(sys.path)
print(sys.path): 是一个大列表,里面放了一对文件路径,第一个路径永远是当前执行文件所在的文件夹
sys.path.append(r'D:\Python项目\day14\dir1') 给环境变量添加默认路径 这是个绝对路径
一定要分清楚谁是执行文件谁是被导入文件(******)
绝对导入必须依据执行文件所在的文件夹路径为准,即绝对路径
1.绝对导入无论在执行文件中还是被导入文件都适用
相对导入
.代表的当前路径
..代表的上一级路径
...代表的是上上一级路径
注意:
相对导入不能再执行文件中使用,只能在被导入的模块中使用,使用相对导入 就不需要考虑
执行文件到底是谁,相对路径是相对当前模和被应用模块之间的相对路径,只需要知道模块与模块之间路径关系
# 软件开发目录规范
# bin 目录下启动文件start.py的内容
import sys
import os
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
sys.path.append(BASE_DIR)
"""
# import os
# print(os.path.dirname(__file__))
#这个结果打印的是 sys.path(print(sys.path)) 中第一个目录,即当前目录的绝对路径,由os模块提供,用于拼接路径
# 1.将core文件路径添加到system path中 ...太low
# 2.将ATM文件夹添加到system path中
os.path.dirname(os.path.dirname(__file__)) 这个嵌套的意思就是当前执行文件目录的父目录,这个路径用于给下载软件的客户使用
pycharm会自动将你新建的最顶层的目录自动添加到环境变量中
上面这两句话 不是针对你的 是针对下载你这个软件的用户
"""
from core import src
# 在启动文件 导入核心代码目录 的 模块文件名 因为是执行文件的父目录了,即bin的父目录可以找到core目录
if __name__ == '__main__': # 如果该文件是执行文件,则执行导入模块中的run()函数
src.run()
软件开发目录规范
bin 目录
start.py 启动文件
conf 目录
settings.py 配置文件
core 目录
src.py 核心逻辑功能,核心代码文件
db 目录
数据库
lib 目录
common.py 公共模块文件
log 目录
log.log 日志文件
Readme 解释程序功能,说明文件
'''