• day17笔记


    一、循环导入问题

    什么是循环导入:

    在导入的时候,模块a需要访问模块 b名称空间的数据,但是模块b中被访问的数据还没有初始化完成,和模块a形成了交叉引用

    产生的原因:

    出现这种问题一般是因为没有规划好层级,架构设计不当,出现模块间相互引用的情况。

    解决方法:

    主要有两个:
    1.在导入的时候,让模块a不要访问模块 b名称空间的数据
    2.数据初始化完成后,才让模块a访问模块 b的数据,也就是把导入放到后面,或者使用函数定义阶段只识别语法的特性解决循环导入的问题,将导入语句放入函数内部

    以上方法都可以解决问题,但治标不治本

    循环导入的最好的解决方法是从架构上优化,即调整模块和模块成员的设计。一个好的原则是:可导出的成员变量,都不应该依赖于导入进来的成员变量。

    二、模块搜索优先级

    在详细解析python查找模块的路径时,我们先来了解一下python中有些什么样的模块。在python中,模块主要有:

    1 内建模块(built-in):在安装python解析器时就自动安装,不以文件形式存在
    2 系统标准模块:安装python时自动安装,默认放在 /Lib/目录下
    3 第三方模块:可以使用pip命令进行安装和管理,默认放在/Lib/site-packages/目录下
    4 自定义模块:自己写的模块,可以放在当前目录,也可以放在任意其它位置

    模块搜索优先级

    1 内建模块就是系统内置的模块,在引入模块时最优先被使用,比如:sys、math、time等模块,
    2 除了系统内建模块以外,其它所有模块都是以文件形式存在,优先级由 sys.path 列表的先后位置确定。除了内建模块以外,其它模块的优先级都是可以调整的,只要修改 sys.path 列表的先后顺序就可以了

    三、py文件的用途和区别

     一个Python文件有两种用途:

    1 一种被当主程序/脚本执行
    2 一种被当模块导入

    为了区别同一个文件的不同用途,每个py文件都内置了__name__变量,该变量在py文件被当做脚本执行时赋值为“__main__”,在py文件被当做模块导入时赋值为模块名

    执行py文件与导入py文件的区别是什么?

    1、被当成程序运行(执行文件)
    2、被当做模块导入(导入文件)
     执行文件在运行的时候会产生执行文件的名称空间,并将程序运行过程中产生的名字存放到执行文件的名称空间。
     如果执行文件中有导入模块的操作,import foo(模块名)会将模块名存放到执行文件的名称空间,执行文件的模块名指向的就是被导入模块的名称空间。
     导入模块会执行被导入的模块文件,产生被导入模块的名称空间,执行过程中产生的名字存放到被导入模块的名称空间,并存放到内存的内置模块中提供给执行文件使用,
     当执行文件运行完毕后,导入模块的文件才会跟着结束。
    

    4、软件开发目录的规范

    为了提高程序的可读性与可维护性,我们应该为软件设计良好的目录结构,这与规范的编码风格同等重要。软件的目录规范并无硬性标准,只要清晰可读即可,推荐目录结构如下:

    Foo/  #项目目录
    |-- core/ # 存放业务逻辑相关代码
    |   |-- core.py
    |
    |-- api/ # 存放接口文件,接口主要用于为业务逻辑提供数据操作。
    |   |-- api.py 
    |
    |-- db/ # 放操作数据库相关文件,主要用于与数据库交互
    |   |-- db_handle.py
    |
    |-- lib/ # 存放程序中常用的自定义模块
    |   |-- common.py
    |
    |-- conf/ # 存放配置文件
    |   |-- settings.py
    |
    |-- run.py # 程序的启动文件,一般放在项目的根目录下,因为在运行时会默认将运行文件所在的文件夹sys.path的第一个路径,这样就省去了处理环境变量的步骤,当然也可以放入bin目录下
    |-- setup.py # 安装、部署、打包的脚本。
    |-- requirements.txt # 存放软件依赖的外部Python包列表
    |-- README # 项目说明文件
  • 相关阅读:
    vue中的$nextTick()
    对SPA(单页面应用)的总结
    函数节流和函数防抖
    前端路由
    let、const
    深拷贝与浅拷贝
    小白浅谈Ajax基础
    关于BFC布局的那些事
    关于BFC的那些事
    Sass基础知识及语法
  • 原文地址:https://www.cnblogs.com/panwenbin-logs/p/13372825.html
Copyright © 2020-2023  润新知