第五周学习笔记总结

总结

函数

常见内置函数

分类 函数 作用
数学运算 abs 求数值的绝对值
divmod 返回两个数值的商和余数
max 返回可迭代对象中元素的最大值
min 返回可迭代对象中元素的最小值
round 对浮点数进行四舍五入求值
sum 对元素类型是数值的可迭代对象中每个元素求和
pow 返回两个数值的幂运算
类型转换 bool 根据传入的参数逻辑值,创建一个新的布尔值
int 将其他进制转换成十进制
float 根据传入的参数,创建一个新的浮点数
complex 根据传入的参数,创建一个新的复数
bytes 根据传入的参数,创建一个新的不可变字节数组
ord 返回ASCII码表字符对应的整数
chr 返回整数所对应ASCII码表字符
bin 将十进制转换成二进制字符串
oct 将十进制转换成八进制字符串
hex 将十进制转换成十六进制字符串
list 根据传入的参数,创建一个新的列表
dict 根据传入的参数,创建一个新的字典
tuple 根据传入的参数,创建一个新的元组
set 根据传入的参数,创建一个新的集合
str 返回一个对象的字符串表现形式
enumerate 根据可迭代对象创建枚举对象
range 根据传入的参数,创建一个整数列表,一般用在 for 循环中
iter 根据传入的参数,创建一个新的可迭代对象
slice 根据传入的参数,创建一个新的切片对象
序列操作 all 判断可迭代对象的每个元素是否都为True值,都为True的情况下,结果才是True
any 判断可迭代对象的元素是否有为True值的元素,有一个为True,结果就是True
filter 用于过滤序列,过滤掉不符合条件的元素,返回符合条件的元素组成新列表
map 使用指定方法去作用传入的每个可迭代对象的元素,生成新的可迭代对象
next 返回可迭代对象中的下一个元素值
reversed 反转序列生成新的可迭代对象
sorted 对可迭代对象进行排序,返回一个新的列表
zip 把 2 个或多个列表合并,并创建一个元组对的列表,元组对的数量以合并列表的最短长度为准
对象操作 help 返回对象的帮助信息
dir 获取对象内部可以通过句点符获取的数据
id 返回对象的唯一内存地址
hash 返回一串随机的数字(哈希值)
type 返回对象的类型,或者根据传入的参数,创建一个新的类型
len 返回对象的长度
format 格式化显示值
反射操作 isinstance 判断某个数据是否属于某个数据类型
callable 判断某个变量是否可以加括号调用
变量操作 globals 返回当前作用域内的全局变量,和其值组成的字典
locals 返回当前作用域内的局部变量,和其值组成的字典
交互操作 input 读取用户输入的内容
print 打印输出对象
文件操作 open 使用指定的模式和编码打开文件,返回文件的读写对象
执行 eval 能够识别字符串中python代码并执行,不识别复杂结构的代码,只能识别最简单的
exec 能够识别字符串中python代码并执行,能够识别复杂结构的代码

可迭代对象

内置有__ iter__方法的都叫做可迭代对象

可迭代对象

字符串 列表 字典 元组 集合 文件对象(本身就是迭代器对象)

不是可迭代对象

整型 浮点型 布尔值 函数名

可迭代对象能够支持for循环

迭代器对象

1.定义

内置有__ iter__ 和 __ next__的对象都称为迭代器对象

2.可迭代对象与迭代器对象的关系

可迭代对象调用__ iter__方法之后就会变成迭代器对象

迭代器对象调用__ iter__方法无论多少次还是迭代器对象本身

3.可迭代对象与迭代器对象的作用

可迭代对象, 迭代器对象, 通过打印操作无法直接看出内部数据的情况

这个时候他们都能够帮你节省内存

迭代器对象给我们提供了一种不依赖于索引取值的方式,正是因为有迭代器对象的存在,我们才能对字典、集合这些无序类型循环取值

for循环本质

语法结构
    for 变量名 in 可迭代对象:
        for循环体代码
1.for会自动将in后面的数据调用__iter__()变成迭代器对象
2.之后每次循环调用__next__()取值
3.最后没有值__next__()会报错 for能够自动处理该错误 让循环正常结束

异常捕获

1.定义

程序在运行的过程中如果出现了异常会导致整个程序的结束,异常就是程序员口中的'bug'

2.异常的结构

提示 说明
关键字line所在行 精准提示你在哪一行代码出错
最后一行冒号左侧 是错误的类型
最后一行冒号右侧 错误的具体原因(也是改bug的关键)

3.常见异常的类型

类型 说明
NameError 试图访问的变量名不存在
IndexError 索引错误,使用的索引不存在,常为索引超出序列范围
KeyError 使用了映射中不存在的关键字(键)时引发的关键字错误
SyntaxError 语法错误
TypeError 类型错误

4.异常分类

分类 说明
语法错误 不允许出现的,一旦出现请立刻修改
逻辑错误 允许出现的,允许出错之后修改即可

5.异常捕获语法结构

1.基本语法结构(针对性很强)

try:
    可能会出错的代码(被try监控)
except 错误类型1 as e:  # e就是具体错误的原因
    对应错误类型1的解决措施
except 错误类型2 as e:  # e就是具体错误的原因
    对应错误类型2的解决措施
except 错误类型3 as e:  # e就是具体错误的原因
    对应错误类型3的解决措施

2.万能异常(笼统的处理方式)

try:
    name
    d = {'name':'jason'}
    d['pwd']
    123 + 'hello'
except Exception as e:  # 万能异常方式1
    print(e)
except BaseException as e:  # 万能异常方式2
    print(e)

生成器对象

1.定义

生成器是我们自己定义出来的,也有__ iter__ 和 __ next__方法

生成器对象的目的是为了优化代码,节省数据类型的内存占用空间

2.yield关键字用法

  1. 在函数体代码中出现, 可以将函数变成生成器

  2. 在执行过程中, 可以将后面的值返回去, 类似于return

  3. 可以暂停住代码的运行

  4. 还可以接受外界的传值(了解)

生成器表达式

相比列表表达式,将[]换成了(),返回对象不是一个列表,而是一个生成器,相比列表更加省内存
(返回值 for 元素 in 可迭代对象 if 条件)
l1 = (i**2 for i in range(10) if i > 3)
print(l1)  # <generator object <genexpr> at 0x000001A793439C10>

迭代取值与索引取值的差异

方法 优势 劣势
索引取值 可以随意反复的获取任意数据值 针对无序的容器类型无法取值
迭代取值 提供了一种通用的取值方式(不论数据值是无序的还是有序的) 取值一旦开始只能往前不能回退(不能随意反复取值)

模块

模块简介

模块的分类

模块分类 解释 例子
内置模块 解释器自带的,直接就可以使用的模块 import time
time.sleep(3) # 让程序暂停3秒
自定义模块 自己写的模块 注册功能 登录功能
第三方模块 别人写的模块,存在于网络上,使用之前需要提前下载 图形识别 图形视化 语音识别

模块的表现形式

1.py文件(py文件也可以称之为是模块文件)

2.含有多个py文件的文件夹(按照模块功能的不同划分不同的文件夹存储)

3.已被编译为共享库或DLL的c或C++扩展(了解)

4.使用C编写并链接到python解释器的内置模块(了解)

导入模块的两种语法句式

导入模块的句式1import句式
    import md
    """
    import md
    执行文件是   
    被导入文件是  md.py
    
    1.会产生执行文件的名称空间
    2.产生被导入文件的名称空间并运行该文件内所有的代码,存储名字
    3.在执行文件中会获取一个模块的名字,通过该名字点的方式就可以使用到被导入文件名称空间中的名字
    
    补充说明
    同一个程序反复导入相同的模块,导入语句只会执行一次
    """

导入模块的句式2from...import...句式
    from md import money, read1
    read1()
    """
    1.创建执行文件的名称空间
    2.创建被导入文件的名称空间
    3.执行被导入文件中的代码,将产生的名字存储到被导入文件的名称空间中
    4.在执行文件中获取到指定的名字,指向被导入文件的名称空间
    """

image

两种导入方式的优缺点

句式 优点 缺点
import md 通过md点的方式可以使用到模块内所有的名字,并且不会冲突 md什么都可以点,有时候并不想让所有的名字都能被使用
from md import monry, read1 指名道姓的使用指定的名字,并且不需要加模块名前缀 名字极其容易产生冲突(绑定关系被修改)

其他用法

1.起别名

2.导入多个名字

3.全导入

循环导入问题

  • 如何理解循环导入

    循环导入就是两个文件彼此导彼此

  • 循环导入容易出现报错现象

    使用彼此的名字可能是在没有准备好的情况下就使用了

  • 如何解决循环导入保存现象

    彼此在使用彼此名字之前,先准备好

注意:循环导入将来尽量避免出现!!!如果真的避免不了,就想办法让所有的名字使用之前提前准备好

判断文件类型

  • 双下__ name__内置名
__name__
所有py文件都自带__name__内置名
当py文件是执行文件的时候__name__的结果是__main__
当py文件是被导入文件的时候__name__的结果是模块名(文件名)
  • 双下name内置名的应用场景

一般是模块开发者用于测试自己的代码

if __name__ == '__main__'
	当文件是执行文件时,才会执行的子代码
# 一般只出现在整个程序的启动文件中
'''在pycharm中,输入main+Tab 可以自动补全'''

模块的查找顺序

  • 查找顺序

1.先去内存中找

2.再去内置中找

3.再去sys.path中找(程序系统环境变量)

绝对导入与相对导入

绝对导入

其实就是以执行文件所在的sys.path为起始路径,往下一层层查找

由于pycharm会自动将项目根目录添加到sys.path中,所以查找模块肯定不报错的方法就是永远从根路径往下一层层找

如果不是用pycharm运行,则需要将项目根目录添加到sys.path(针对项目根目录的绝对路径有os模块可以帮助我们获取)

相对导入

相对导入可以不参考执行文件所在的路径,直接以当前模块文件路径为准

1.只能在模块文件中使用,不能在执行文件中使用

2.相对导入在项目比较复杂的情况下,可能会出错

总结:相对导入尽量少用,推荐使用绝对导入(因为简单不会出错,只需从根路径往下一层层找就行)

名称 内容
. 在路径中意思是当前路径
.. 在路径中意思是上一层路径
../.. 在路径中意思是上上一层路径

包的概念

如何理解包

专业的角度:内部含有__ init__.py的文件夹

直观的角度:就是一个文件夹

包的作用

内部存放多个py文件(模块文件),仅仅是为了更加方便的管理模块文件

具体使用

导入包名其实导入的是里面的__ init__.py文件(该文件里面有什么你才能用什么)

其实也可以跨过__ init__.py直接导入包里面的模块文件

注意:

针对python3解释器:其实文件夹里面有没有__ init__.py已经无所谓了,都是包

针对python2解释器:文件夹下面必须要有__ init__.py才能被当做包

编程思想的转变

经历阶段 过程 代码编写在单文件内还是多文件内 举例
小白阶段 按照需求从上往下堆叠代码 单文件 相当于将所有的文件全部存储在c盘并且不分类
函数阶段 将代码按照功能的不同封装成不同的函数 单文件 相当于将所有的文件在c盘下分类存储
模块阶段 根据功能的不同拆分不同的模块文件 多文件 相当于将所有的文件按照功能的不同分门别类到不同的盘中

软件开发目录规范

文件夹名 文件名 作用
bin文件夹 start.py 用于存储程序的启动文件
conf文件夹 settings.py 用于存储程序的配置文件
core文件夹 src.py 用于存储程序的核心逻辑
lib文件夹 common.py 用于存储程序的公共功能
db文件夹 userinfo.txt 用于存储程序的数据文件
log文件夹 log.log 用于存储程序的日志文件
interface文件夹 user.py order.py goods.py 用于存储程序的接口文件
readme文件(文本文件) 用于编写程序的说明,介绍,广告,类似于产品说明书
requirements.txt文件 用于存储程序所需的第三方模块名称和版本

常见内置模块

注意:py文件名称尽量不要与模块名冲突(内置,第三方)

collections模块

名称 说明
namedtuple 可以创建包含名称的元组
deque 双端队列,可以快速的在队列头部和尾部添加、删除元素
ordereddict 有序字典,可以记住元素的添加顺序
defaultdict 带有默认值的字典
Counter 计数器,计数功能

时间模块之time模块

  • 时间的三种格式
格式 表现形式
时间戳 time.time()
结构化时间 time.gmtime()
格式化时间 time.strftime()
  • 三种时间格式的展现形式
import time
print(time.time())
print(time.gmtime())
print(time.strftime('%Y-%m-%d %H:%M:%S'))
格式 含义
%Y 完整的年份
%m 月份(01-12)
%d 一个月中第几天(01-31)
%H 一天中的第几个小时(24小时制,00 - 23)
%M 分钟数(00-59)
%S 秒数(01-59)
%X 本地相应时间

时间模块之datetime模块

名称 功能说明
datetime.data 日期对象,常用的属性有year,month,day
datetime.time 时间对象,常用的属性有hour, minute, second
datetime.datetime 日期时间对象,常用的属性有year,month,day,hour, minute, second
datetime.timedelta 表示时间间隔,即两个时间点的间隔,主要用于做时间加减的

os模块

  • os模块主要是跟当前程序所在的操作系统打交道
名称 功能说明
os.mkdir('dirname') 生成单级目录
os.makedirs('dirname1/dirname2') 生成多级目录,也可生成单级目录
os.rmdir('dirname') 可以删除单级目录,但是目录下不能有其他数据,也不支持多级目录删除
os.removedirs('dirname') 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
os.listdir('dirname') 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
os.rename("oldname","newname") 重命名文件目录
os.remove() 删除一个文件
os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径
os.chdir("dirname") 改变当前脚本工作目录
os.path.dirname(__ file__) 获取当前文件所在的目录路径
os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False
os.path.isdir(path) 如果path是一个存在的目录,则返回True, 否则返回False
os.path.isfile(path) 如果path是一个存在的文件,返回True, 否则返回False
os.path.join() 拼接路径
os.path.getsize() 获取文件大小(bytes)

sys模块

  • sys模块主要是跟python解释器打交道
名称 功能名称
sys.argv 命令行参数List,第一个元素是程序本身路径
sys.path 返回模块的搜索路径, 结果是列表
sys.version 获取Python解释程序的版本信息
sys.platform 返回操作系统平台名称
sys.exit(n) 退出程序,正常退出时exit(0),错误退出sys.exit(1)

json模块

  • 简介

json模块也称之为序列化模块

什么叫序列化——将原本的字典、列表等内容转换成一个字符串的过程就叫做序列化

  • 作用

json模块是不同编程语言之间数据交互必备的模块(处理措施)

  • json格式的数据

数据基于网络传输肯定是二进制,那么在python中只有字符串可以调用encode方法转成二进制数据,所以json格式的数据也属于字符串

json格式的数据有一个非常明显的特征:首先肯定是字符串,其次是标志性的双引号

名称 功能说明
json.dump() 将其他数据以json格式字符串写入文件
json.load() 将文件中json格式字符串读取出来并转换成对应的数据类型
json.dumps() 将其他数据类型转换成json格式字符串
json.loads() 将json格式字符串转化成对应的数据类型
posted @   空白o  阅读(16)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示