• 包,软件开发目录规范


    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
    ' % (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))
    
  • 相关阅读:
    164 Maximum Gap 最大间距
    162 Find Peak Element 寻找峰值
    160 Intersection of Two Linked Lists 相交链表
    155 Min Stack 最小栈
    154 Find Minimum in Rotated Sorted Array II
    153 Find Minimum in Rotated Sorted Array 旋转数组的最小值
    152 Maximum Product Subarray 乘积最大子序列
    151 Reverse Words in a String 翻转字符串里的单词
    bzoj3994: [SDOI2015]约数个数和
    bzoj 4590: [Shoi2015]自动刷题机
  • 原文地址:https://www.cnblogs.com/pythonywy/p/10997626.html
Copyright © 2020-2023  润新知