模块和软件开发的目录规范

模块的使用

引入

模块:就是一系列功能的集合体

1、模块的分类

模块大致分为四种类别:

(1)一个py文件就是一个模块,文件名叫test.py,模块名叫test

(2)一个包含有__init__.py文件的文件夹称为包,包也是模块

(3)已被编译为共享库或DLL的C或C++扩展

(4)使用C编写并链接到python解释器的内置模块

2、模块的使用

为何要使用模块?

从文件级别组织程序,更方便管理

随着程序的发展,功能越来越多,为了方便管理,我们通常将程序分成一个个的文件,这样左程序的结构更清晰,方便管理。这时我们不仅仅可以把这些文件当作脚本去执行,还可以把它们当作模块来导入到其他的模块中,实现了功能的重复利用

拿来注意,提升开发效率

同样的原理,我们可以下载别人写好的模块然后导入到自己的项目中使用,这种拿来主义,可以极大地提升我们的开发效率

ps:如果你退出python解释器然后重新进入,那么你之前定义的函数或者变量都将丢失,因此我们通常将程序写道文件中以便永久保存,需要时就通过python test.py方式去执行,此时test.py被称为脚本script

下面我们介绍关于模块的使用 

2.1 import

模块可以包含可执行的语句和函数的定义,这些语句的目的时初始化模块,它们只在模块名第一次遇到导入import语句时才执行(import语句时可以在程序中的任意位置使用的,且针对同一个模块很import多次,为了防止你重复导入,python的优化手段是:第一次导入后就将模块名加载到内存了,后续的import语句仅是对已经加载到内存中的模块对象增加了一次引用,不会重新执行模块内的语句)

2.2from...import...

from...import...的对比

唯一区别就是:使用from...import...则时将spam中的名字直接导入到当前的名称空间中,所以在当前名称空间中,直接用名字就可以了,无序加前缀:spam.

from...import...的方式有哈出也有坏处

好处:使用起来方便

坏处:加大了名字重复的可能性

3、模块的搜索路径与优先级

模块的查找顺序时:内存中已经加载的模块->内置模块->sys.path路径中包含的模块

​ sys.path环境变量 解决模块导入问题

软件开放的目录规范

bin 可执行程序

start.py

from core import src
src.run()

conf 配置文件

#settings.py
import os
BASE_DIR=os.path.dirname(os.path.dirname(__file__))
LOG_PATH=r'%s\log\access.log'%(BASE_DIR)

func_dic = {}

core 核心

#src.py
from lib import common
from conf import settings

@common.outter(1,'取款')
def withdraw():
    print('正在取款...')
@common.outter(2,'转账')
def transfer():
    print('正在转账...')
    common.log_time('转账1000万')
@common.outter(3,'查询余额')
def check_balance():
    print('查询余额...')
@common.outter(4,'存款')
def save():
    print('正在存款...')
# @outter(5,'退出')
# def exit():
#     pass

def run():
    while True:
        print('欢迎使用中国银行ATM自动存取款机'.center(50, "="))

        for k,v in settings.func_dic.items():
            print('%s : %s'%(k,v[0]))

        chioce=input('请输入命令编号q退出:')
        if chioce in settings.func_dic:
            settings.func_dic[chioce][1]()
        elif chioce=='q':
            break
        else:
            print('输入错误请重新输入')

db 数据

lib 库-模块

#common.py
import time

from conf import settings

def log_time(msg):
    with open(('%s'%(settings.LOG_PATH)),mode='at',encoding='utf-8')as f:
        f.write('%s%s\n' %(time.strftime('%Y-%m-%d %H:%M:%S'),msg))

def outter(n,msg):
    def wrapper(func):
        #添加记录
        settings.func_dic[str(n)]=[msg,func]
    return wrapper

log 日志

#access.log
2021-01-04 23:04:59转账1000万
2021-01-04 23:05:00转账1000万
2021-01-04 23:05:01转账1000万
posted @ 2021-01-04 23:18  williamgess  阅读(99)  评论(0编辑  收藏  举报