Python入门学习 DAY16 模块导入\软件开发目录规范

Python入门     

DAY 16

今日内容:模块循环导入,区分python文件的两种用途,模块的搜索路径(相对路径和绝对路径),软件开发的目录规范

1.模块循环导入问题

循环导入是在模块之间的,但是模块的循环导入不一定会出错

举一个错误的例子:

有一个模块m1和模块m2代码如下

#模块m1
print('正在导入m1')
from m2 import y
x='m1'
#模块m2
print('正在导入m2')
from m1 import x
y='m2'

错误原因:m1会在自身代码没有全部执行之前,进入了m2的代码体,然而这时m2中的导入的m1的x值是没有在m1的名字空间创建的,所以会报错:cannot import name 'x'

解决这个问题有两种方法

方法一:将导入模块的代码放在赋值变量之后,这样就可以在进入m2之前,创建x,那么在m2中就能导入m1的x了

代码如下:

#模块m1
print('正在导入m1')
x='m1'
from m2 import y

方法二:利用函数定义阶段只检测语法不执行的特性来解决这一问题 

代码如下:

扫描二维码关注公众号,回复: 2812657 查看本文章
#模块1
print('正在导入m1')
def func1():
    from m2 import y
x='m1'

2.区分python文件的两种用途

文件被执行和文件被导入

python编写的文件中有一个__name__的内置函数

当在m1中运行此代码print(__name__)就会返回一个值为__main__,说明这个文件被执行了

#m1.py
print('run')
print(__name__)

当做run.py文件中导入m1时,那么m1中的print(__name__) 返回的就是m1(模块名),也就是说明了m1文件被导入了

#run.py
import m1

3.模块的搜索路径

导入模块的搜索路径有3个  先是搜索内存  其次搜索内置模块 最后搜索sys.pyth

sys是一个内置的模块 sys.pyth是系统的一个环境路径我们可以通过以下代码得出sys.pyth的路径内容

#run.py
import sys
print(sys.path)

会得到一个路径列表

一般来说,基于sys.pyth中的路径去搜索的都为绝对路径

绝对路径

我们说一个文件导入另一个文件只需要 import 模块名 列如: 在run.py 中 可以通过 import m1 就可以导入模块m1 可以使用m1的功能,但是这是基于2个文件处于同一文件夹下时可以这样导入 但是

如果m1放在和run.py同级的dir1的文件夹下我们要如何去导入m1?

我们可以通过二种方式实现

方式一:import dir1.m1   在导入的模块前加上模块上级文件的文件名即可

方式二:我们可以在sys.path中添加模块所在的文件名称,这样导入时就能找到dir1下的模块m1

#run.py
import sys
sys.path.append(r'E:\python\oldboy_py_03\8月\day16\03 模块的搜索路径\dir1')
import m1

相对路径

相对路径是通过  .  的方式,   一个 '.'   表示在当前目录   二个   '..'  表示当前文件上级目录   三个 '...' 就是表示当前文件上级目录的上级目录 以此类推 

注意:相对路径导入是不能用在执行文件的,只能用在模块中去导入其他模块

例:m1 和 m2 在同一文件目录下,那么m1 可以 通过 from . import m2 来导入m2 ,注意:2个模块如果在包中的话,这样写就会出错

4.软件开发的目录规范

例:按照软件开发的目录规范,为图书管理系统建立一套规范的目录结构,并总结个目录结构的功能

bin 用于存放可执行文件

conf 用于存放配置文件,全局性的变量之类

lib 库文件,用于存放自定义的模块和包

core 用于存放核心逻辑代码

log 用于存放日志文件

db 用于存放数据库信息,数据库操作

Readme 是软件说明之类的软件信息

以上为本次学习内容

猜你喜欢

转载自blog.csdn.net/sql121407/article/details/81514321
今日推荐