python学习之模块
python学习之模块
昨日回顾-温故而知新
生成器对象
- yield关键词是定义生成器的关键词
- yield和return相似,都会返回关键词后的值
- 该函数需要调用一次之后才能转换为生成器
- 生成器可以使用__ next __ 迭代取值
- 迭代取值时,遇到yield便会停止,再次取值会从关键词下开始
- yield可以配合format接受外部传值
自定义range方法
def my_range(start, stop=None, step=1):
if not stop:
stop = start
start = 0
while start < stop:
yield start
start += step
生成器表达式
res = (i for i in 被迭代取值的元素 if 条件)
核心:只有迭代取值的时候,才会执行生成器内部代码
模块简介
各式各样的模块,大大提升了python程序员的开发效率
导入模块的两种句式
1.import 模块名
2.from 模块名 import 模块内名字
导入模块的技巧
1.接受其他名
import time as tm
from md import name as nm
注意名字越简单越好,前提是不要冲突
2.多个模块或名字导入
import 模块1,模块2,模块3 模块之间最好有相依功能块,否则混乱,影响代码简洁度
from 模块 import 名字1,名字2,名字3 相同模块内,导入多少个名字都不影响
3.通用导入
from 模块 import *
from 模块 import
取出模块内所有名字
今日学习内容
注意 · 实际项目中的文件名都是英文
循环导入问题
两个文件相互导入彼此很容易报错,或者重复运行代码
实际工作中尽量避免出现循环导入,如果实在避不开
请保证双方使用对方的名字前,被使用的名字一定已经要定义好,要么就将导入模块的句式写入函数体代码中。
判断文件类型
python中的文件分为两种类型
🦅执行文件
🐑被执行文件
内置变量名:__name__
作用:判断当前是否是执行文件
结果:
__main__ 当前是执行文件
模块名 当前被导入文件
if __name__ == '__main__'
如果当前文件时执行文件,才会运行子代码
快捷输入,main加上tab键
模块的查找顺序
内存空间,相当于当前代码运行中,从全局空间提取到内存中运行代码
内置模块就类似内置函数一样,python已经写好功能的模块
sys.path就好比环境变量,前面空间都没有找到的最后会来到这个地方来查找
sys.path的返回值是一个列表,存放了很多的路径,内存空间和内置模块中找不到,但是依旧需要使用的模块,可以将模块的地址使用append添加到sys.path。
pycharm会自动将项目目录所在的路径添加到sys.path中
或者使用from 模块 import 模块内名
from 最上层文件.上层文件.目标文件夹 import 目标文件中的模块名
绝对导入和相对导入
1.绝对导入
当前执行文件,目光所及,不需要参照物,可以直接获取调用到的模块就是绝对导入
类似于:添加路径到sys.thon中,同级或下级文件中查找
2.相对导入
不再以执行文件的目光为主,使用参考位置,指出模块所在位置,导入使用模块。
类似于:from . import a
.表示当前路径
..表示上一层路径
../..表示上上一层路径
绝对导入准确性较高,添加到sys.thon中的路径,不会因为自身py文件改变而导致失去参考位置失去目标模块路径。
包
特点:内部含有__init__.py的文件夹
包就是多个模块的结合体,存放了多个模块文件
相同包中存放着的模块文件,较为相似
就好比不同类型的文件夹,比如视频文件夹,图片文件夹等
主要方便我们分配和管理。
在导入包的时候 使用名字其实是从__init__.py文件中拿
1.如果想直接通过包的名字使用包里面所有的模块 那么需要在__init__.py中提前导入
上述方式的好处在于__init__可以提前帮你准备好可以使用的名字
2.也可以绝对导入,不需要考虑包的存在,直接当成普通文件夹即可。
软件开发目录规范
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文本文件
存放程序需要使用的第三方模块及对应的版本
解耦合
一、耦合
1、耦合是指两个或两个以上的体系或两种运动形式间通过相互作用而彼此影响以至联合起来的现象。
2、在软件工程中,对象之间的耦合度就是对象之间的依赖性。对象之间的耦合越高,维护成本越高,因此对象的设计应使类和构件之间的耦合最小。
3、分类:有软硬件之间的耦合,还有软件各模块之间的耦合。耦合性是程序结构中各个模块之间相互关联的度量。它取决于各个模块之间的接口的复杂程度、调用模块的方式以及哪些信息通过接口。
二、解耦
1、解耦,字面意思就是解除耦合关系。
2、在软件工程中,降低耦合度即可以理解为解耦,模块间有依赖关系必然存在耦合,理论上的绝对零耦合是做不到的,但可以通过一些现有的方法将耦合度降至最低。
3、设计的核心思想:尽可能减少代码耦合,如果发现代码耦合,就要采取解耦技术。让数据模型,业务逻辑和视图显示三层之间彼此降低耦合,把关联依赖降到最低,而不至于牵一发而动全身。原则就是A功能的代码不要写在B的功能代码中,如果两者之间需要交互,可以通过接口,通过消息,甚至可以引入框架,但总之就是不要直接交叉写。
4、观察者模式:观察者模式存在的意义就是「解耦」,它使观察者和被观察者的逻辑不再搅在一起,而是彼此独立、互不依赖。比如网易新闻的夜间模式,当用户切换成夜间模式之后,被观察者会通知所有的观察者「设置改变了,大家快蒙上遮罩吧」。QQ消息推送来了之后,既要在通知栏上弹个推送,又要在桌面上标个小红点,也是观察者与被观察者的巧妙配合。
今日小结
加油,不要辜负期望!