• 模块与项目开发目录规范




    # 今日知识
    '''
    模块
    import 模块的导入
    from ...import 导入模块
    循环导入
    __name__的用法
    模块查找的顺序
    模块的绝对导入和相对导入
    项目开发目录规范
    '''


    # 一 模块的基础
    '''
    什么是模块:就是一系列功能的结合体
    模块一共分为三种来源:
    1.内置模块(python解释器自带的)
    2.第三方模块(别人写好的,直接调过来用就可以了)
    3.自定义模块(自己手写的)

    模块一共有四种表现:
    1.使用python编写的py文件 ,就是说py文件也可以称之为模块
    2.已被编译为共享库或DLL的C或C++扩展(了解)
    3.把一系列模块组织到一起的文件夹(该文件下有一个__init__.py文件,该文件夹被称之为包)
    4.使用C编写并连接到Python解释器的内置模块

    那么使用模块有什么用:
    1.别人的模块或第三方的模块:就是可以把别人的模块调过来自己用,不需要自己在写,极大的提高了效率
    2.使用自己自定义的模块:因为当写的程序比较庞大的时候,你不可能都写在一个py文件当中,
    可以把一些公共的方法写到一个py文件中,然后其他文件以模块的形式导过去直接调用就可以了

    重点:一定要注意区分那个是执行文件,那个是被导入的模块
    '''

    # 二 import 导入模块
    '''
    导入模块需要注意的几个点:
    1.导入模块的时候如果你多次导入不会在执行魔窟啊文件,只会沿用第一次导入的成果
    2.只要你能拿到函数名 无论在哪都可以通过函数加括号来调用这个函数(会回到函数定义阶段 依次执行代码)
    3.函数在定义阶段 名字查找就已经固定死了 不会因为调用位置的变化而改变

    使用import导入模块 访问模块名称空间中的名字统一句势:模块名.名字
    1.指名道姓的访问模块中的名字,永远不会与执行文件中的名字冲突
    2.如果你想要访问模块中的名字,必须用模块名 . 名字的方式



    当我们到模块的时候不推荐把几个没有联系的模块写在一行导入
    import os,time,md
    我们应该这样写:
    import os
    import time
    import md
    注意:我们通常导模块的时候句式会写在文件最上方

    当模块的名字比较复杂的情况下,可以给模块用 as 后面 起别名


    '''

    # 三 from ... import 导入模块
    '''
    首先建俩个py文件:
    md文件,里面放:
    money = 1000
    def read1():
    print('md',money)
    def read2():
    print('md模块')
    read1()
    def change():
    global money
    money = 0
    __all__ = ['money','read1','read2']
    在建一个run文件
    在run文件import md

    他的执行顺序是什么:
    首次导入md.py模块
    1.运行md.py
    2.将产生的名字存放到md.py名称空间中
    3.直接拿到指向模块md.py名称空间中某个值的名字


    利用from...import...句式
    缺点:
    1.访问模块中的名字不需要加模块名前缀
    2.在访问模块中的名字可能会与当前执行文件中的名字冲突

    补充:如果用 from md1 import *
    可以一次性将md模块的名字全部加载过来,但是不推荐这样使用,因为你不知道你需要用那些名字

    有一个__all__的方法可以指定当前所在py文件被当做模块导入的时候,
    我们可以限制导入者能拿到的名字个数

    '''

    # 四 循环导入以及如何解决循环导入
    '''
    循环导入是如何导致的
    循环导入的问题点:名字没有产生就使用名字
    解决循环导入:先产生名字,在导入模块
    将会产生循环导入的模块,导入语法延后 - 延后导入

    问题
    m1.py
    import m2
    print(m2.y)
    x = 666

    m2.py
    import m1
    print(m2.x)
    y = 888

    解决
    m1.py
    x = 666
    import m2
    print(m2.y)


    m2.py
    y = 888
    import m1
    print(m2.x)

    注:
    如果出现了循环导入问题,那么一定是你的程序设计的不合理,
    循环导入问题应该在程序设计阶段就应该避免

    '''

    # 五 __name__的用法
    '''
    def index1():
    print('index1')

    def index2():
    print('index2')

    print(__name__)
    当文件被当做执行文件执行的时候__name__打印的结果是__main__
    当文件被当做模块导入的时候__name__打印的结果是 模块名(没有后缀)
    if __name__=='__main__'
    index1()
    index2()
    快捷写法main直接 tab键即可

    '''
    # 六 模块的查找顺序
    '''
    模块的查找顺序
    1.先从内存中找
    2.内置中找
    3.sys.path中找(环境变量):
    注意:
    1.一定要分清楚谁是执行文件谁是被导入文件
    2.py文件名不应该与模块名(内置的,第三方的)冲突

    sys.path就是一个大列表,里面放了一堆文件路径,第一个路径永远是执行文件所在的文件夹
    '''

    # 七 绝对导入与相对导入
    '''
    绝对导入必须依据执行文件所在的文件路径为准
    1.绝对导入无论在执行文件中还是被导入文件都适用


    相对导入:
    .代表的是当前路径
    ..代表的是上一级路径
    ...代表的是上上一级路径

    注意:
    相对导入不能再执行文件中使用
    想对导入只能在被导入的模块中使用,使用相对导入,就不需要考虑
    执行文件是谁,只需要知道模块与模块之间的路径关系

    注:一般用绝对导入比较多
    '''

    # 八 项目目录规范

    项目名
    bin文件夹
    start.py项目启动文件

    conf文件夹
    settings.py项目配置文件

    core文件夹
    src.py项目核心逻辑文件

    db文件夹
    数据相关

    lib文件夹
    common.py项目所用到的公共的功能文件

    log文件夹
    log.log项目的日志文件

    readme文本文件 介绍项目


    启动文件的代码
    import sys
    import os

    BASE_DIR = os.path.dirname(os.path.dirname(__file__))
    sys.path.append(BASE_DIR)

    from core import src
    if __name__ == '__main__':
    src.run()




    # 今日知识
    '''
    模块
    import 模块的导入
    from ...import 导入模块
    循环导入
    __name__的用法
    模块查找的顺序
    模块的绝对导入和相对导入
    项目开发目录规范
    '''


    # 一 模块的基础
    '''
    什么是模块:就是一系列功能的结合体
    模块一共分为三种来源:
    1.内置模块(python解释器自带的)
    2.第三方模块(别人写好的,直接调过来用就可以了)
    3.自定义模块(自己手写的)

    模块一共有四种表现:
    1.使用python编写的py文件 ,就是说py文件也可以称之为模块
    2.已被编译为共享库或DLL的C或C++扩展(了解)
    3.把一系列模块组织到一起的文件夹(该文件下有一个__init__.py文件,该文件夹被称之为包)
    4.使用C编写并连接到Python解释器的内置模块

    那么使用模块有什么用:
    1.别人的模块或第三方的模块:就是可以把别人的模块调过来自己用,不需要自己在写,极大的提高了效率
    2.使用自己自定义的模块:因为当写的程序比较庞大的时候,你不可能都写在一个py文件当中,
    可以把一些公共的方法写到一个py文件中,然后其他文件以模块的形式导过去直接调用就可以了

    重点:一定要注意区分那个是执行文件,那个是被导入的模块
    '''

    # 二 import 导入模块
    '''
    导入模块需要注意的几个点:
    1.导入模块的时候如果你多次导入不会在执行魔窟啊文件,只会沿用第一次导入的成果
    2.只要你能拿到函数名 无论在哪都可以通过函数加括号来调用这个函数(会回到函数定义阶段 依次执行代码)
    3.函数在定义阶段 名字查找就已经固定死了 不会因为调用位置的变化而改变

    使用import导入模块 访问模块名称空间中的名字统一句势:模块名.名字
    1.指名道姓的访问模块中的名字,永远不会与执行文件中的名字冲突
    2.如果你想要访问模块中的名字,必须用模块名 . 名字的方式



    当我们到模块的时候不推荐把几个没有联系的模块写在一行导入
    import os,time,md
    我们应该这样写:
    import os
    import time
    import md
    注意:我们通常导模块的时候句式会写在文件最上方

    当模块的名字比较复杂的情况下,可以给模块用 as 后面 起别名


    '''

    # 三 from ... import 导入模块
    '''
    首先建俩个py文件:
    md文件,里面放:
    money = 1000
    def read1():
    print('md',money)
    def read2():
    print('md模块')
    read1()
    def change():
    global money
    money = 0
    __all__ = ['money','read1','read2']
    在建一个run文件
    在run文件import md

    他的执行顺序是什么:
    首次导入md.py模块
    1.运行md.py
    2.将产生的名字存放到md.py名称空间中
    3.直接拿到指向模块md.py名称空间中某个值的名字


    利用from...import...句式
    缺点:
    1.访问模块中的名字不需要加模块名前缀
    2.在访问模块中的名字可能会与当前执行文件中的名字冲突

    补充:如果用 from md1 import *
    可以一次性将md模块的名字全部加载过来,但是不推荐这样使用,因为你不知道你需要用那些名字

    有一个__all__的方法可以指定当前所在py文件被当做模块导入的时候,
    我们可以限制导入者能拿到的名字个数

    '''

    # 四 循环导入以及如何解决循环导入
    '''
    循环导入是如何导致的
    循环导入的问题点:名字没有产生就使用名字
    解决循环导入:先产生名字,在导入模块
    将会产生循环导入的模块,导入语法延后 - 延后导入

    问题
    m1.py
    import m2
    print(m2.y)
    x = 666

    m2.py
    import m1
    print(m2.x)
    y = 888

    解决
    m1.py
    x = 666
    import m2
    print(m2.y)


    m2.py
    y = 888
    import m1
    print(m2.x)

    注:
    如果出现了循环导入问题,那么一定是你的程序设计的不合理,
    循环导入问题应该在程序设计阶段就应该避免

    '''

    # 五 __name__的用法
    '''
    def index1():
    print('index1')

    def index2():
    print('index2')

    print(__name__)
    当文件被当做执行文件执行的时候__name__打印的结果是__main__
    当文件被当做模块导入的时候__name__打印的结果是 模块名(没有后缀)
    if __name__=='__main__'
    index1()
    index2()
    快捷写法main直接 tab键即可

    '''
    # 六 模块的查找顺序
    '''
    模块的查找顺序
    1.先从内存中找
    2.内置中找
    3.sys.path中找(环境变量):
    注意:
    1.一定要分清楚谁是执行文件谁是被导入文件
    2.py文件名不应该与模块名(内置的,第三方的)冲突

    sys.path就是一个大列表,里面放了一堆文件路径,第一个路径永远是执行文件所在的文件夹
    '''

    # 七 绝对导入与相对导入
    '''
    绝对导入必须依据执行文件所在的文件路径为准
    1.绝对导入无论在执行文件中还是被导入文件都适用


    相对导入:
    .代表的是当前路径
    ..代表的是上一级路径
    ...代表的是上上一级路径

    注意:
    相对导入不能再执行文件中使用
    想对导入只能在被导入的模块中使用,使用相对导入,就不需要考虑
    执行文件是谁,只需要知道模块与模块之间的路径关系

    注:一般用绝对导入比较多
    '''

    # 八 项目目录规范
    '''
    项目名
    bin文件夹
    start.py项目启动文件

    conf文件夹
    settings.py项目配置文件

    core文件夹
    src.py项目核心逻辑文件

    db文件夹
    数据相关

    lib文件夹
    common.py项目所用到的公共的功能文件

    log文件夹
    log.log项目的日志文件

    readme文本文件 介绍项目


    启动文件的代码
    import sys
    import os

    BASE_DIR = os.path.dirname(os.path.dirname(__file__))
    sys.path.append(BASE_DIR)

    from core import src
    if __name__ == '__main__':
    src.run()


    '''
  • 相关阅读:
    XAMPP配置8080端口
    Composer安装使用
    .Net商品管理(注释,百度,提问,对比,总结)
    .Net数据库操作
    VS链接数据库
    .Net中字典的使用
    一套解决方案,多个项目
    转化一下解决问题的思路,弯道超车
    灵活的运用Model类
    Razor数组数据
  • 原文地址:https://www.cnblogs.com/zahngyu/p/11197055.html
Copyright © 2020-2023  润新知