模块
模块循环导入问题:即q模块导入了w模块,w模块又导入了e 模块,e 模块又导入了w模块
模块循环/嵌套导入抛出异常的根本原因是由于在python中模块被导入一次之后,就不会重新导入,只会在第一次导入时执行模块内代码
在我们的项目中应该尽量避免出现循环/嵌套导入,如果出现多个模块都需要共享的数据,****可以将共享的数据集中存放到某一个地方
解决办法:两种,一种是将某些执行的代码放到导入模块之前,利用的是在导入之前加载 # 不推荐,代码太多时,混乱
# 第二种, 是将函数包裹导入,这样可以在调用时才加载,让其他先加载
参考 https://www.cnblogs.com/linhaifeng/articles/6379069.html#_label4 模块导入问题
# 编写好的一个python文件可以有两种用途:
一:脚本,一个文件就是整个程序,用来被执行
二:模块,用来被导入使用
# python为我们内置了全局变量__name__,
当文件被当做脚本执行时:__name__ 等于'__main__'
当文件被当做模块导入时:__name__等于模块名
#作用:用来控制.py文件在不同的应用场景下执行不同的逻辑
if __name__ == '__main__':
调用函数
在脚本文件时会执行 在别人调用时,不会自动触发调用函数,只有主动调用函数
模块的搜索路径
查找顺序是 内存中已经加载的模块 >内置模块 > sys.path
路径中存在的模块
# 可通过 sys.modules 来查看内存中加载的模块 sys.argv查看内置模块
可通过修改sys.path
import sys
sys.path.append('/a/b/c/d')
sys.path.insert(0,'/x/y/z') #排在前的目录,优先被搜索
- import
- import 模块1 模块1.函数()
- import 模块1.模块2.模块3 模块1.模块2.模块3.函数()
- from xx import xxx
- from 模块.模块 import 函数 函数()
- from 模块.模块 import 函数 as f f()
- from 模块.模块 import * 函数1() 函数2()
- from 模块 import 模块 模块.函数()
- from 模块 import 模块 as m m.函数()
# from...import 模块.模块 错误 不能在import后面用模块.模块
python 解释器会默认将当前执行文件的目录加到sys.path。此外还有五个python安装时的目录也会加入
pycharm 在运行时,会将当前执行文件的根目录加入到sys.path,一般我们不这样用,会手动添加到目录文件到环境变量
__file__当前运行脚本的路径 os.path.dirname上表示一级目录
# 建议要么将项目执行文件直接放到根目录下,然后会自动加在到环境变量,要么是用os.path.abspath(__file__)获取绝对路径,然后查找上级直到跟目录,多次寻找上一级,此以寻找二次就找到根目录为例 base_path = os.path.dirname(os.path.abspath(__file__)), sys.path.append(base_path)。根目录下的第一级文件可以直接导入,一般是下面情况