模块基本模式

模块

模块循环导入问题:即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)。根目录下的第一级文件可以直接导入,一般是下面情况

image-20200724182708851

原文地址:https://www.cnblogs.com/feiguoguobokeyuan/p/13446146.html