学习python的第十九天(包,软件开发目录规范)
程序员文章站
2022-03-22 12:09:52
6.10自我总结 1.包 1.什么是包 包是模块的一种形式,包的本质就是一个含有 的文件的文件夹 2.为什么用包 当一个模块功能太多的时候不方便进行管理,我们用包来进行管理 3.包的使用 1.导入包发生的三件事 1. 创建一个包的名称空间 2. 由于包是一个文件夹,无法执行包,因此执行包下的__in ......
6.10自我总结
1.包
1.什么是包
包是模块的一种形式,包的本质就是一个含有__init__.py
的文件的文件夹
2.为什么用包
当一个模块功能太多的时候不方便进行管理,我们用包来进行管理
3.包的使用
1.导入包发生的三件事
创建一个包的名称空间
由于包是一个文件夹,无法执行包,因此执行包下的__init__.py文件,将执行过程中产生的名字存放于包名称空间中(即包名称空间中存放的名字都是来自于__init__.py)且init中文件执行导入文件的路径以运行文件为基准
在执行文件中使用包内的名称,是指向包的名称空间
2.包的两种导入方式
- import ...
- from ... import...
两种导入方式与模块的相似,只是导入包的时候运行的是包里面的init
文件
3.个人理解包导入的两种方式路径的写法
关于.的使用,在(from.)是当前目录.(from..)当前文件目录的上一级,.要和from连用才有当前目录,上一级目录说法,(import.)不是当前,import相当于python的环境配置路径
2.软件开发目录规范
为了提高程序的可读性与可维护性,我们应该为软件设计良好的目录结构,这与规范的编码风格同等重要,简而言之就是把软件代码分文件目录。假设你要写一个atm软件,你可以按照下面的目录结构管理你的软件代码:
atm/ |-- core/ | |-- src.py # 业务核心逻辑代码 | |-- api/ | |-- api.py # 接口文件 | |-- db/ | |-- db_handle.py # 操作数据文件 | |-- db.txt # 存储数据文件 | |-- lib/ | |-- common.py # 共享功能 | |-- conf/ | |-- settings.py # 配置相关 | |-- bin/ | |-- run.py # 程序的启动文件,一般放在项目的根目录下,因为在运行时会默认将运行文件所在的文件夹作为sys.path的第一个路径,这样就省去了处理环境变量的步骤 | |-- log/ | |-- log.log # 日志文件 | |-- requirements.txt # 存放软件依赖的外部python包列表,详见https://pip.readthedocs.io/en/1.1/requirements.html |-- readme # 项目说明文件
# run.py import sys import os base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.append(base_dir) from core import src if __name__ == '__main__': #是导入run的时候不会调用函数 src.run()
# settings.py import os base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) db_path = os.path.join(base_dir, 'db', 'db.txt') log_path = os.path.join(base_dir, 'log', 'user.log') # print(db_path) # print(log_path)
# src.py from conf import settings from lib import common def login(): print('登陆') def register(): print('注册') name = input('username>>: ') pwd = input('password>>: ') with open(settings.db_path, mode='a', encoding='utf-8') as f: f.write('%s:%s\n' % (name, pwd)) # 记录日志。。。。。。 common.logger('%s注册成功' % name) print('注册成功') def shopping(): print('购物') def pay(): print('支付') def transfer(): print('转账') func_dic = { '1': login, '2': register, '3': shopping, '4': pay, '5': transfer, } def run(): while true: print(""" 1 登陆 2 注册 3 购物 4 支付 5 转账 6 退出 """) choice = input('>>>: ').strip() if choice == '6': break if choice not in func_dic: print('输入错误命令,傻叉') continue func_dic[choice]()
# common.py import time from conf import settings def logger(msg): current_time = time.strftime('%y-%m-%d %x') with open(settings.log_path, mode='a', encoding='utf-8') as f: f.write('%s %s' % (current_time, msg))