欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

学习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.导入包发生的三件事

  1. 创建一个包的名称空间

  2. 由于包是一个文件夹,无法执行包,因此执行包下的__init__.py文件,将执行过程中产生的名字存放于包名称空间中(即包名称空间中存放的名字都是来自于__init__.py)且init中文件执行导入文件的路径以运行文件为基准

  3. 在执行文件中使用包内的名称,是指向包的名称空间

2.包的两种导入方式

  1. import ...
  2. 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))