Python学习之路_day_16(模块搜索路径,开发规范)

1、模块循环导入问题:

模块循环/嵌套导入抛出异常的根本原因是由于在python中模块被导入一次之后,就不会重新导入,只会在第一次导入时执行模块内代码

在我们的项目中应该尽量避免出现循环/嵌套导入,如果出现多个模块都需要共享的数据,可以将共享的数据集中存放到某一个地方

在程序出现了循环/嵌套导入后的异常分析、解决方法如下:

#错误示范文件内容如下

#m1.py

print('正在导入m1')

from m2 import y

 

x='m1'

#m2.py

print('正在导入m2')

from m1 import x

 

y='m2'

#run.py

import m1

 

方法一:导入语句放到最后

#m1.py

print('正在导入m1')

x='m1'

 

from m2 import y

 

#m2.py

print('正在导入m2')

y='m2'

 

from m1 import x

 

 

方法二:导入语句放到函数中

#m1.py

print('正在导入m1')

def f1():

    from m2 import y

    print(x,y)

 

x = 'm1'

 

#m2.py

print('正在导入m2')

def f2():

    from m1 import x

    print(x,y)

 

y = 'm2'

 

#run.py

import m1

 

m1.f1()

方法一中的名称空间关系图:

方法二中的名称空间关系图:

 

 

2、模块的搜索路径

 

2.1、模块的查找顺序是:

 

 

 

 

 

2.2、导入模块的路径:

 

绝对导入: 以执行文件的sys.path为起始点开始导入,称之为绝对导入

        优点: 执行文件与被导入的模块中都可以使用

        缺点: 所有导入都是以sys.path为起始点,导入麻烦

相对导入: 参照当前所在文件的文件夹为起始开始查找,称之为相对导入

        符号: .代表当前所在文件的文件加;

..代表上一级文件夹;

...代上一级的上一级文件夹

        优点: 导入更加简单

        缺点: 只能在导入包中的模块时才能使用,不能在执行文件中用

 

3、区分python文件的两种用途:

  • 编写好的一个python文件可以有两种用途:    

u 一:脚本,一个文件就是整个程序,用来被执行

u 二:模块,文件中存放着一堆功能,用来被导入使用

 

  • python为我们内置了全局变量__name__,

u 当文件被当做脚本执行时:__name__ 等于'__main__'

u 当文件被当做模块导入时:__name__等于模块名

 

  • 作用:用来控制.py文件在不同的应用场景下执行不同的逻辑

u if __name__ == '__main__'


4、软件开发目录

 

  • confàsettings.py
  • core(主要逻辑)àsrc.py
  • dbàdb.txt
  • lib(库)àcommon.py
  • bin(入口,启动)àstart.py
  • logàaccess.log
  • readme(说明书)

 

 

原文地址:https://www.cnblogs.com/zjh009/p/9470095.html