模块简介及软件开发目录

模块简介及软件开发目录

内容概要

面向过程编程

模块简介

模块的两种导入方式

模块导入的顺序

模块导入拓展

执行文件与模块文件的判断

循环导入

内容详细

一、面向过程编程

面向过程编程好比在设计一条生产线生产流程,有顺序有步骤地执行代码

# 注册功能中的面向过程编程思想

1、获取用户名和密码

2、把数据按照一定格式储存

3、打开文件把储存好的数据写入文件

'''缺点:一旦要修改功能,就需要整体改造(牵一发而动全身)'''

模块简介

# 什么是模块?

模块是一系列功能的结合体

# 为什么要有模块?

为了提高开发效率(站在巨人的肩膀上)

# 模块的三个来源

1、内置模块(python自带的模块)

2、第三方模块(别人写好了发布网上,可以下载使用)

3、自定义模块(一个py文件可以是一个模块)

# 模块的存在形式

1、是一个py文件

2、用c语言编写链接过来的

3、包好一组模块的包(文件夹)

# 包就是多个py文件(模块)的集合

'一般包文件夹中会含有__init__文件'

4、已被编译为共享库或DLL的C或C++扩展

'''以后编写项目遇到一些复杂功能先考虑是否有相应的模块可以调用'''

模块的两种导入方式

# 1、import 模块名

import time

'''要分清楚执行文件和别导入文件'''

# 多次导入相同模块也只会执行一次

# 导入模块内部原理

1、在内存中开辟执行文件的全局名称空间

2、运行模块文件,开辟被导入模块文件的全局名称空间

3、把模块中的变量名和数据都存放在模块的全局名称空间中

4、在执行文件中产生一个模块名指向模块的全局名称空间

'''如果需要使用模块的数据,只需要以模块名.变量名获取即可'''

# 多次导入也只会执行一次

# 2、from 文件名 import 模块名

# from 模块名 import 模块文件中的变量名

1、产生执行文件的全局名称空间

2、执行模块文件,产生模块的全局名称空间

3、将模块中执行之后产生的名字全部存档于模块名称空间中

4、在执行文件中有一个money指向模块名称空间中的money指向的值

'''

from...import...指名道姓的导入某个名字

在使用的时候直接写名字即可 但是当当前名称空间有相同名字的时候

就会产生冲突 使用的就变成了当前名称空间

'''

from db import db_hander

from db_hander import select

模块导入的顺序

1、首先从内存中寻找

2、其次从内置模块中找

3、最后在sys.path的系统路径中找(自定义模块)

'''注意在给自定义模块起名字时,不要命名跟内置模块一模一样的名字,不然python默认优先在内置模块中导入模块'''

import time

import m3

def test():

time.sleep(10)

m3.index()

test()

'''开始执行test函数之后,就算再沉睡等待的10秒期间把m3模块删掉了,还是可以打印m3中的index函数的,因为当test函数开始执行时,m3的数据已经加载到了内存,临时把硬盘中m3文件删除,内存中m3的数据还是存在的'''

# sys.path

显示当前文件导入模块时会寻找的文件路径,存放在列表中,第一个路径就是当前文件的存在路径

import sys

print(sys.path)

['D:\\ATM-TRAIN\\ATM3\\core', 'D:\\ATM-TRAIN\\ATM3', 'D:\\pycharm-profession\\PyCharm 2021.1.3\\plugins\\python\\helpers\\pycharm_display', 'C:\\Users\\limeixiang\\.virtualenvs\\pytxt-03w0UXQ8\\Scripts\\python36.zip', 'D:\\Python36\\Lib', 'D:\\Python36\\DLLs', 'D:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\Python36_64', 'C:\\Users\\limeixiang\\.virtualenvs\\pytxt-03w0UXQ8', 'C:\\Users\\limeixiang\\.virtualenvs\\pytxt-03w0UXQ8\\lib\\site-packages', 'D:\\pycharm-profession\\PyCharm 2021.1.3\\plugins\\python\\helpers\\pycharm_matplotlib_backend']

模块导入拓展

# 1、给导入的模块取别名,方便调用

import indexxxxxxx as i

i.index()

# 2、连续导入

'''如果是连续导入多个模块,一般这几个模块是一系列功能相似的,如果不是建议分开导入'''

import time

import os

from index import read1, read2, read3

# 3、导入文件中所有的功能 *

from index import *

idex.read1()

index.read2()

但是模块中如果有希望不被获取的苏数据,可以把它缩进在以下语句中

if __name__ == '__main__':

def index1():

pass

index2():

pass

执行文件与模块文件的判断

在py文件中打印

print(__name__)

如果当前文件是执行文件,会打印一个'__main__'

如果当前文件是被导的模块文件,会打印当前文件名

from core import src

if __name__ == '__main__':

src.run()

这个语句一般是在启动文件中

循环导入

# m1文件

print('from m1')

from m2 import y

x = 2

# m2文件

print('from m2')

from m1 import x

y = 1

# 循环导入文件

import m1

'''会报错,因为在导入对方的变量名时,都还没开始定义x,y'''

# 补救方法

1、把定义的x和y放在导入语句的前面,这样可以在对方导入之前就先定义好

print('from m1')

x = 2

from m2 import y

print('from m2')

y = 1

from m1 import x

2、把导入语句封装在函数中,这样,不调用函数时是不会执行函数代码

print('from m1')

def idnex1():

from m2 import y

x = 2

绝对导入

'''在程序文件中出现多个文件之间导入模块的情况时,导入路径始终以执行文件所在的路径为准'''

按照执行文件所在的sys.path查找模块

以以下图片中的文件目录为例

1、start.py是执行文件,它所在的路径是 D:\ATM-TRAIN\ATM3

2、start.py作为执行文件可以启动 core 文件下的 src.py文件

3、src.py作为被导入文件,它要导入的模块都要在执行文件路径 D:\ATM-TRAIN\ATM3 基础上导入

相对导入

句点符:

. 表示当前文件所在的路径

.. 表示上一层文件所在的路径

# 打破始终以执行文件路径为准的规则,只考虑两个文件之间的位置

'''只能在模块文件之间使用,不可以在执行文件中使用'''

软件开发目录规范

bin

放置程序启动文件(当启动文件很少甚至只有一个时,可以直接写在外面

run.py(start.py)

lib

放置程序中各个文件都会使用到的公共方法

common.py

conf

放置配置信息(程序中的'常量')比如路径信息

settings

log

放置日志文件

logs.py

core

用户视图层,放置程序中的核心业务代码

src.py

db

数据处理层,放置用户数据和数据处理文件

user_db(文件)

db_hander.py

readme.md

程序说明文件,填写使用说明或者广告

requirements.txt

存放项目所需要用到的第三方模块以及版本号

相关推荐

方舟生存进化骇鸟怎么驯服 骇鸟吃什么
谁有365体育投注网址

方舟生存进化骇鸟怎么驯服 骇鸟吃什么

📅 09-16 👁️ 2494
十二星座谁最笨 哪些星座智商相对较低?
谁有365体育投注网址

十二星座谁最笨 哪些星座智商相对较低?

📅 09-19 👁️ 5363
《魔兽世界》wow米奥妮克丝位置坐标介绍
直播365app下载

《魔兽世界》wow米奥妮克丝位置坐标介绍

📅 07-21 👁️ 6108