循环导入问题 区分py文件的两种用途 模块的搜索路径与查找优先级 软件开发的目录规范

一.循环导入问题
回顾:导入模块时,先会创建一个模块名的全局名称空间,将模块中的变量或函数名存放进去,再次导入此模块时,因为已经存在了此模块名的全局名称空间,故不再重新创建
示例:
主程序 start.py 开头就调用m1模块,m1模块中,开头导入m2模块,需要使用m2模块中的y,然后定义x = 1,m2模块开头导入m1模块,需要使用m1中的x.然后定义y=2

运行流程:运行start时,先导入模块m1,创建了m1的全局名称空间,后m1开头就导入m2模块,此时x变量名还未写入m1全局名称空间就创建m2的全局名称空间,而m2又导入m1,因为m1的全局名称空间已经存在,故不再创建m1的全局名称空间,m2需要调用m1中的x值,但是此时m1中并未存入x,无法调用到,因此会报错

解决方案:
1.换位置.如m1中先定义x=1,后导入m2模块,这样m2能调用m1中的x,但是如果代码多,位置不慎就会报错,故不推荐
2.将第一个正常放置在全局,第二个写入函数,这样2个不在同一个层级,就不会有冲突了

二.区分py文件的两种用途
1.直接运行
2.当做模块导入
三.模块的搜索路径和查找优先级
1.先从内存中已经导入的模块中查找
2.然后再查找内置的模块
3.最后去sys.path列表中存放的多个文件夹里依次检索
PS:默认会将当前操作的文件夹放在第一位,pycharm会将上一层文件夹也加入进来,但是在交互式环境中不会加入上一层文件夹
四.软件开发的目录规范
以开发的项目名称为名建一个文件夹,下面建一些子文件夹:
bin:存放执行程序:start.py
core:存放核心代码
conf:存放配置文件
lib:存放共享文件
log:存放日志文件
db:存放数据

PS:1.如果start.py在bin 文件夹中时,需要将 项目的根目录添加到解释器的环境变量中
方法:
import os #os 是与操作系统间交互的模块
import sys #sys是与解释器交互的模块
##os.path.dirname(file) 获取当前文件所在的文件夹名
##os.path.dirname(os.path.dirname(file))再上一层就是根目录的文件夹名
base_path = os.path.dirname(os.path.dirname(file))
#将项目根目录添加到解释器的环境变量中
sys.path.append(base_path)

	2.conf中setting中是配置文件,如配置log文件的路径在log文件夹中的access.log,
	import os
	base_path = os.path.dirname(os.path.dirname(__file__))
	log_path = os.path.join(base_path,log,access.log)
	在写函数时导入setting就行了
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值