周结4

周结

  • 异常处理的语法结构
  • 生成器对象
  • 自定义range功能
  • 生成器表达式
  • 模块简介
  • 模块导入的两种方式及扩展
  • 模块的查找顺序
  • 绝对导入与相对导入
  • 包的使用
  • 软件目录开发规范
  • 常用内置模块之collections
  • 常用内置模块之time datetime
  • 常用内置模块之随机数random
  • 常用内置模块之sys os
  • 常用内置模块之json

异常处理的语法结构

try:
    待监测的代码(可能会报错的代码)
except 错误类型 as e(变量名): e就是系统提示的错误信息
    对错误类型的详情解析
万能异常:
try:
    可能会出错的代码
except execption as 变量名:
    对各种出错的异常做统一解析处理
结合else使用:
    try里面的代码正常运行 没有报错则正常执行else子代码
结合finally:
    无论try的子代码有没有报错最后都要执行finally的子代码
补充:
    assert  断言 便是提前去预判他会不会报错
    raise  主动报异常

生成器对象

内置有__iter_与__next__的迭代对象
	迭代器对象是解释器自动提供的有数据类型与文件对象
生成器对象是程序员编写出来的
	函数体代码中填写yield关键字
    
    函数体代码中如果有yiled关键字 那么函数名加括号不会执行函数体代码 会生成一个生成器对象
    使用加括号之后的结果调用__next__才会执行函数体代码
    每一次执行完__next__代码都会停在yield位置 下次基于该位置继续往下找第二个yield
    
yield 还可以通过send传值给yield赋值号左边的变量名

自定义range功能

def my_range(first, second=None, third=1):
    if not second:
        second = first
        first = 0
    while first < second:
        yield first
        first += third

生成器表达式

就是生成器的简化写法
l1 = ( i + 1 for i in [11, 33, 55, 66, 66])  就是个生成器对象
print(l1)  # generator

模块简介

什么叫模块:一系列功能的结合体
模块的表现形式:
	py文件(py文件也可以成为模块文件)
    含有py文件的文件夹(按照模块功能的不同划分不同的文件夹存储)...
    
模块的三种分类
	1.内置的:python解释器自带能够直接导入使用
    2.第三方的:别人写好的发布在网上的 需要下载使用
    3.自定义的:自己写的

模块导入的两种句式

一定得搞清楚谁是执行文件 谁是被导入文件
在做开发项目的时候py文件的名称一定得是英文 不能出现空格及中文
导入模块的时候不需要填写后缀名
1.import句式
	1.先产生执行文件的名称空间
    2.执行被导入的文件代码将产生的名字放入被导入文件的名称空间中
    3.在执行文件的名称空间中产生一个模块的名字
    4.在执行文件中使用该模块名点的方式使用模块名称空间所有的名字 并且肯定不会产生冲突
2.from...import...句式
	1.先产生执行文件的名称空间
    2.执行被导入文件的代码将产生的名字放入被导入文件的名称空间中
    3.在执行文件中的名称空间中产生对应的名字绑定模块名称空间中对应的名字
    4.在执行文件中直接使用名字就可以访问名称空间中对应的名字
    
    但是在当前名称空间有相同名字的时候 就会产生冲突 使用的就成了当前名称空间
    
起别名:
	既可以给模块起别名也可以给模块中的某个名字起别名
涉及到多个模块导入:
	如果功能不同并不属于一个系列那么推荐分行导入
    如果功能相似度高可以连续导入多个模块 但只有当多个模块相似时 或同属于一个系列的
    
通用导入:
    from a import *  *默认是将模块名称空间中所有的名字导入
	__all__ = ['名字1', '名字2']  针对*可以限制拿的名字
    
循环导入问题
	循环导入:两个文件之间彼此导入并且相互使用名称空间中的名字 极容易报错
    如何解决循环导入问题:应尽量避免出现循环导入问题

判断文件类型

所有的py文件都可以直接被打印__name__对应的值
	当py文件是执行文件的时候__name__对应的值是___name__
    当py文件是被导入文件时__name__对应的值是模块名
快捷方式 main  >>> 直接生成 if __name__ == '__main__':
    						子代码
适应场景:
	1.模块开发
    2.项目启动文件

模块的查找顺序

1.先内存
2.再内置  自定义模块名尽量不要与内置模块名冲突
3.最后到执行文件的系统环境变量sys.path找  可以将模块所在的路径也添加到执行文件的sys.path中即可

绝对导入与相对导入

一定要分清楚谁是执行文件
模块的导入全是以执行文件为准

绝对导入
	from mymd.aaa.bbb.ccc.ddd import name  # 可以精确到变量名
    from mymd.aaa.bbb.ccc import ddd   # 也可以精确到模块名
    就是按照项目根目录一层层往下查找
相对导入
	.在路径中表示当前目录
    ..在路径中表示上一层
    ..\..在路径中表示上上一层目录
    不再依据文件所在的sys.path 而是以模块自身路径为准
    相对导入只能用于模块文件中 不能在执行文件中使用  它的频率使用较低

包的使用

多个py文件的集合>>>就是文件夹
内部含有__init__.py文件的文件夹 在python2看看是否有_init_.py文件夹内没有的话python2不认为是或者模块包 而在python3则没有这么多规则,只有py文件有功能代码就是模块

如果只想用包中某几个模块 还是按照之前的导入方式 form 包名 import 模块名

如果直接导包名 import 包名
导入包其实就是导下面的__init__.py文件 该文件内有什么名字就可以通过包名点的什么名字

软件开发目录规范

其实就是为了分类管理
1.bin文件  项目启动文件
	start.py
2.conf 项目配置文件
	seting.py
3.core 主要存放项目核心文件
	scr.py  里面存放项目的核心功能
4.interface 存放项目接口文件
	goods.py  根据具体的业务逻辑划分对应的文件
    account.py
5.db 主要存放相关数据
	userinfo.txt
    db_handler.py 存放数据库操作相关的代码
6.log 主要存放项目的日志文件
	log.log
7.lib 主要存放项目的公共功能
	common.py
8.readme 主要存放项目相关说明
9.requirements.txt文件 主要存放项目所需的模块及版本

常用内置函数之collection

在内置数据类型(dictlistsettuple)的基础上 collections模块还提供了几个额外的数据类型
1.namedtuple: 生成可以使用名字来访问元素内容的tuple
2.deque: 双端队列,可以快速的从另外一侧追加和推出对象
3.Counter: 计数器,主要用来计数
4.OrderedDict: 有序字典
5.defaultdict: 带有默认值的字典

常用内置模块之时间模块time datetime

三种时间的表达方式
1.时间戳
2.结构化时间:主要是给时间看的 人看不适应
3.格式化时间:主要是给人看的

模块 time
import time

time.time 时间戳
time.steftime 时间字符串  time.strftime('%Y-%m-%d %H-%M-%s')  %H-%M-%S相当于 %X  结构化时间参数若不传,则显示当前时间
字符串时间-->结构化时间
time.strptime(时间字符串,字符串对应格式)
>>>time.strptime("2017-03-16","%Y-%m-%d")
time.localtime 时间元组 将一个时间戳转换为当前时区的
time.sleep() 原地阻塞
时间戳是计算机能够识别的时间 时间字符串是人能够看懂的时间 元组则是用来操作时间的

模块 datatime
import datetime
print(datetime.datetime.now())  # 2022-10-19 18:08:13.680085
print(datetime.datetime.today())  # 2022-10-19 18:08:13.682081
print(datetime.date.today())  # 2022-10-19
c = datetime.datetime(2099, 10, 23, 12, 20)
print('指定日期:', c)  # 指定日期: 2099-10-23 12:20:00
datetime.datetime.strptime('2022/10/15', '%Y/%m/%d')  不规则的时间表示形式转换为标准的时间格式 strptime

时间差值 做定时任务
import datetime
a = datetime.date.today()
print(a)  # 2022-10-19
b = datetime.timedelta(days=6) # 设置一个时间差6天
# (days可以是seconds秒数也可以是minutes分钟\hours小时\weeks星期)
print(a + b)  # 2022-10-25     # 6天之后

常用内置模块之随机数模块random

import random
random.randint() 随机产生01之间的小数
random.randint(1, 10)  随机产生110之间的整数
random.randrange(1, 20, 2) 随机产生120之间的奇数
random.choice(['一等奖''二等奖''三等奖']) 随机抽取一个样本 返回的是''
random.choices(['一等奖''二等奖''三等奖'])  可以自定义随机抽取的个数 返回的是[]
random.sample(['jason', 'kevin', 'tony', 'oscar', 'jerry', 'tom'], 3) 可以自定义随机抽取的个数
产生验证码:
code = ''
for i in range(4):
    a = chr(random.randint(65, 90))
    b = chr(random.randit(97, 122))
    c - str(random.randit(0, 9))
    temp = random.choice(a, b, c)
    code += temp
print(code)

常用内置模块之os 模块

os模块主要与代码运行所在的操作系统打交道
dir就是dirrctory(计算机的) 目录,文件夹
import os
 os.mkdir(r'd1')  在执行文件所在路径创建一个名字叫d1文件夹 一次只能创建一个
 os.makedirs()  可以创建多级目录 也可以创建单级目录

 是删目录
 os.rmdir(r'd1')  可以删除单级目录 每次只能删一个 不可以一次性删除多级目录 只能删空的
 os.removedirs(r'd2\d3')  可以删多级目录 只能删空的目录
    
 获取指定路径下内容名称
 os.listdir()  listdir()括号里面什么都不写 默认获取当前路径下所有文件名称 也可以获取指定下路径的名称
 
 是删文件
 os.rename(r'a.txt', r'b.txt')  重命名文件 将a.txt重命名为b.txt 绝对路径也可以重命名
 os.remove(r'aa.txt')  而相对路径 只能在当前目录下操作  绝对路径也能删文件,只删路径的最后的那一个
    
 获取/切换当前工作目录
 os.getcwd()  获取执行文件当前的目录
 os.chdir('..')   chdir路径切换  ..切换到上一级目录
 
 动态获取项目根路径
 注意绝对路径是包括执行文件本身的!!! os.path.abspath(_ _ file _ _)  绝对路径间是撬棍\
 目录路径是不包含执行文件本身的!!!! os.path.dirname(_ _file _ _)  目录路径间是斜杠/

 判断路径是否存在(文件、目录)
 print(os.path.exists(r'01 os模块.py'))  # 判断文件路径是否存在  True
 print(os.path.exists(r'D:\pythonProject03\day19'))  # 判断目录是否存在  True
 这个更精确,就判断文件路径在不在
 print(os.path.isfile(r'01 os模块.py'))  # 判断路径是不是文件的路径  True
 print(os.path.isfile(r'D:\pythonProject03\day19'))  # 判断路径是否是文件  False
 判断路径是不是目录
 print(os.path.isdir(r'01 os模块.py'))   # False
 print(os.path.isdir(r'D:\pythonProject03\day19'))  # True
    
 路径拼接
 os.path.join()
 涉及到路径拼接一定不要自己做 因为不同的操作系统路径分隔符不一样
 print(os.path.join(s1, s2))      # 一定要用path.join方法拼接路径

常用内置模块之sys 模块

sys.path  获取执行文件的sys.path

常用内置模块之jaon 模块

json模块也称为序列化模块 序列化可以打破语言限制实现不同编程语言之间数交互
dump 转存
load 载入
序列化的目的
1、以某种存储形式使自定义对象持久化;
2、将对象从一个地方传递到另一个地方。
3、使程序更具维护性。

针对数据
 json.dumps()  序列化:将某一数据类型转化成json格式字符串
 json.loads()  反序列化:json格式字符串转化成某一个编程语言对应的数据类型

针对文件
json.dump()  将某一数据类型转化成json格式字符串写入文件 必须要有一个文件对象
json.load()  读取文件中json格式数据并反序列化成数据类型
posted @   小福福  阅读(21)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
  1. 1 原来你也在这儿 温余福
  2. 2 世间美好和你环环扣扣 温余福
  3. 3 随风起舞 温余福
  4. 4 罪恶都市 温余福
世间美好和你环环扣扣 - 温余福
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

作词 : 尹初七

作曲 : 温余福

编曲 : 彭圣杰

偏偏秉烛夜游

偏偏秉烛夜游

午夜星辰 似奔走之友

爱你每个结痂伤口

酿成的陈年烈酒

入喉尚算可口

入喉尚算可口

怎么泪水 还偶尔失守

邀你细看心中缺口

裂缝中留存 温柔

此时已莺飞草长 爱的人正在路上

此时已莺飞草长 爱的人正在路上

我知他风雨兼程 途经日暮不赏

穿越人海 只为与你相拥

此刻已皓月当空 爱的人手捧星光

我知他乘风破浪 去了黑暗一趟

感同身受 给你救赎热望

知道你不能 还要你感受

知道你不能 还要你感受

让星光加了一点彩虹

让樱花偷偷 吻你额头

让世间美好 与你环环相扣

此时已莺飞草长 爱的人正在路上

此时已莺飞草长 爱的人正在路上

我知他风雨兼程 途经日暮不赏

穿越人海 只为与你相拥

此刻已皓月当空 爱的人手捧星光

我知他乘风破浪 去了黑暗一趟

感同身受 给你救赎热望

此时已莺飞草长 爱的人正在路上

此时已莺飞草长 爱的人正在路上

我知他风雨兼程 途经日暮不赏

穿越人海 只为与你相拥

此刻已皓月当空 爱的人手捧星光

我知他乘风破浪 去了黑暗一趟

感同身受 给你救赎热望

知道你不能 还要你感受

知道你不能 还要你感受

让星光加了一点彩虹

当樱花开的纷纷扬扬

当世间美好 与你环环相扣

特别鸣谢:槿葵,我们的海报制作妹妹。

原唱:柏松

吉他:柏松

和声:柏松

录音:柏松

混音:张强

点击右上角即可分享
微信分享提示