Day18课后有感

今日内容概要

  • 循环导入问题

  • 判断文件类型

  • 模块的查找顺序(重要)

  • 绝对导入与相对导入

  • 模块与包(简单)

  • 编程思想的演变

  • 软件开发目录规范

循环导入问题

  两个文件彼此导入彼此

举个🌰

 

 以上情况会出现循环导入的时候极有可能出现某个名字还没有被创建就使用的情况导致报错

"""在以后的编程生涯中 尽量去避免出现循环导入的问题"""

 

如果确实需要循环导入 那么需要确保双方使用的名字都必须'提前定义好'
(一错再错的办法)
方式1:将导入模块的句式写在定义名字的下面
方式2:将导入模块的句式写在函数体代码内

举个🌰>>>方式1

 

 

判断文件类型

py文件可以被分为两种类型
1.执行文件
2.被导入文件

有一个内置变量__name__
当__name__所在的文件是执行文件的时候 结果是__main__
当__name__所在的文件是被导入文件时候 结果是文件名(模块名)  # dr

举个🌰

 

 

 

 

 

可以借助于__name__区分被导入的代码和测试代码

  输入这行代码>>> if __name__ == '__main__':

  简写方式>>>直接输入main之后按tab键即可

 

当前文件是执行文件的时候才会执行子代码块

举个🌰
 

 

 


如果导入dr.py则不会执行子代码块

举个🌰

 

 

模块的查找顺序(重要‼️)

内存空间>>>内置模块>>>sys.path(类似我们之前学过的环境变量)>>>找不到就报错

 

内存空间找一下:

 

 

内置模块中查找:

"""强调:在创建py文件时候一定不要跟模块名(内置、第三方)冲突!!!"""

 

 

去sys.path查找(类似于我们前面学习的环境变量)

当内存中和内置中都没有要查找的模块时 就会去下面的路径中挨个查找

"""
sys.path中虽然有很多路径 但是只需要重点关注第一个
第一个其实就是执行文件所在的路径
###############################################################
查找模块的时候只需要站在执行文件所在的路径查看即可
###############################################################
"""

如果站在执行文件所在路径查找不到 如何解决?

方式一:主动添加sys.path路径(类似于添加环境变量)

 

 

"""
pycharm会自动将项目目录所在的路径添加到sys.path中 不借助pycharm就找不到 会报错

"""

 

方式2:利用from...import...句式指名道姓的查找

 

 

 也可以在多层文件夹下

from aaa.bbb.ccc import mm  # 通过点的方式进入下一层目录

   print(mm.name)

 

绝对导入与相当导入

  在导入模块的时候一切查找模块的句式都是以执行文件为准
  无论导入的句式是在执行文件中还是在被导入文件中!!!

 

# 绝对导入(推荐使用)
	永远按照执行文件所在的路径一层层往下查找(无脑查找即可)
        例句:from aaa.bbb import a    

 

# 相对导入
	相当导入打破了必须参照执行文件的所在路径的要求 只需要考虑当前模块所在的路径然后使用特殊符号.去查找其他模块即可
例句:from . import a. # 导入当前路径的a
        from . .import a  # 导入上层路径的a
        from . . /. .import a  # 导入上上一层的a

比较局限的使用场景:相对导入只能在被导入文件中使用 不能在执行文件中使用        

  

什么是包?

  包就是内部含有__init__.py的文件夹 内部有多个模块的结合体

  在pycharm中
  文件夹里面有一个__init__.py文件就是 包

 

如何导入包?

  在导入包的时候 索要名字其实是跟包里面的__init__.py要 因为默认从__init__取


如何使用包里面所有的模块 ?

  那么需要在__init__.py中提前导入  句式:from 包 import  文件1,文件2,文件3
  上述方式的好处在于__init__可以提前帮你准备好可以使用的名字

  也可以直接忽略__init__的存在使用绝对导入即可
  上述方式的好处在于不需要考虑包的存在 直接当成普通文件夹即可

编程思想演变

1.小白阶段
此阶段写代码就是在一个文件内不停地堆叠代码的行数(面条版本)

2.函数阶段
此阶段写代码我们学会了将一些特定功能的代码封装到函数中供后续反复调用

3.模块阶段
此阶段不单单是将功能代码封装成函数,并且将相似的代码功能拆分到不同的py文件中便于后续的管理

软件开发目录规范

  我们实际工作中编写的程序软件都是有很多文件夹和文件组成的
  这些文件夹和文件其实都有各自存在的意义和主要功能

 

1.bin文件夹
存放程序的启动文件 start.py


2.conf文件夹
存放程序的配置文件 settings.py


3.core文件夹
存放程序的核心业务 src.py
就是最为重要的代码 能够实现具体需求


4.lib文件夹

存放程序公共的功能 common.py


5.db文件夹
存放程序的数据 userinfo.txt


6.log文件夹
存放程序的日志记录 log.log


7.readme文本文件
存放程序的说明、广告等额外的信息


8.requirements.txt文本文件
存放程序需要使用的第三方模块及对应的版本

 

ps:目录的名字可以不一致 但是主要的思想是一致的
就是为了便于管理 解耦合...
拿到启动文件之后直接运行即可 无需考虑程序内部的复杂程度 便于管理
当代码越来越多的时候 你才能体会到拆分的好处!!!

 ps:多说无益,以上所有目录类型必须要全部能默写!!!

 

 

 

posted @ 2022-03-27 02:26  ji哩咕噜  阅读(33)  评论(0编辑  收藏  举报