今日总结
一、常见函数
二、可迭代对象
三、迭代器对象
四、for循环内部原理
五、异常处理
六、for循环的本质
七、迭代取值与索引取值的对比
一、常见函数
1 、help () 查看注释信息
help (len )
2 、id () 返回一串数字,相当于内存地址
print (id ('owen' ))
3 、int () 类型转换、机制转换
l1 = 11.11
print (int (l1))
4 、isinstance () 判断数据类型
print (type ('owen' )is str )
print (isinstance ('owen' , str ))
print (isinstance ('owen' , int ))
5 、pow () 幂指数
print (pow (5 , 2 ))
6 、round () 自动四舍五入
print (round (1.23 , 1 ))
print (round (1.23 , 2 ))
print (round (2.56 , 1 ))
7 、sum () 求和
print (sum ([1 , 2 , 3 , 4 , 5 , 6 , 7 ]))
二 、可迭代对象
1、迭代
迭代的含义:
迭代其实就是更新换代,并且在更新换代时,要更新的内容还要依靠上一次更新的结果
迭代代码是什么样子?
a = 1
while True :
print (a)
a += 1
使用迭代取值:
l1 = [11 , 12 , 13 , 14 , 15 , 16 ]
n = 0
while n < len (l1):
print (l1[n])
n += 1
2 、可迭代对象
含义:
内置中有__iter__方法的都可以叫做可迭代对象
可迭代数据类型:
i = 123
f = 12.14
s = 'owen'
l = [1 , 2 , 3 , 4 ]
d = {'name' :'owen' , 'age' : 20 }
t = (1 , 2 , 3 , 4 )
se = {1 , 2 , 3 , 4 , 5 }
b = True
f = open ()
def index ():pass
"""
属于可迭代对象的类型有:
字符串、列表、字典、元组、集合、文件对象
可迭代对象就是为迭代取值做准备
"""
三、迭代器对象
1 、含义:
可迭代对象调用__iter__,生成的结果就是迭代器对象
2 、特征:
含有__iter__的方法和__next__方法
3 、如何理解迭代器对象
迭代器对象可以很大程度上节省存储空间
也就是你想要什么,要哪个可以给你拿出来,当你不需要的时候,它就是一个很小的东西,很节省空间
4 、迭代器对象取值
调用__next__方法,当值被取完时会发生报错
5 、迭代器对象补充说明
5.1 、有些双下方法有简单写法:
"""
__方法名__ = 方法名()
例如:
__iter__ = iter()
__next__ = next()
__len__ = len()
"""
l = [1 , 2 , 3 , 4 ]
print (l.__iter__())
print (iter (l))
5.2 、有一些可迭代对象本身也是迭代器对象>>>:文件对象
5.3 、当迭代器对象调用一次__iter__方法编辑迭代器对象,当再调用时,结果还是迭代器本身
l = [1 , 2 , 3 , 4 ]
res = l.__iter__()
res1 = l.__iter__().__iter__().__iter__()
print (res, res1)
5.4 、迭代取值的要求
当直接调用一个数据时,如果被调用对象不是迭代器对象,那么每次调用的结果都一样
eg:
l = [1 , 2 , 3 , 4 ]
print (l.__iter__().__next__())
print (l.__iter__().__next__())
print (l.__iter__().__next__())
print (l.__iter__().__next__())
如何让它取里面一个一个的值
把l变成迭代器对象
l = [1 , 2 , 3 , 4 ]
res = l.__iter__()
当l成为迭代器对象时再次调用
print (res.__iter__().__next__())
print (res.__iter__().__next__())
print (res.__iter__().__next__())
print (res.__iter__().__next__())
四、for循环内部原理
for 循环底层原理:
for + 变量名 + in +可迭代对象:
循环体代码
1 、将in 后面的数据调用__iter__()变成迭代器对象
文件对象之所以可以for 循环,就是因为文件对象就是迭代器对象
2 、针对产生的迭代器对象一次调用__next__()方法迭代取值
3 、当值被取完之后,会自动处理报错并退出循环
l1 = [11 , 12 , 13 , 14 , 15 , 16 ]
n = 0
while n < len (l1):
print (l1[n])
n += 1
res = l1.__iter__()
while True :
print (res.__next__())
五、异常处理
1 、异常含义:
代码运行出错就是异常, 异常之后程序会立刻停止异常我们也叫做bug
2 、异常信息的组成部分
Traceback (most recent call last):
File "F:/PycharmProjects/pythonProject3/11.py" , line 28 , in <module>
l1
NameError: name 'l1' is not defined
2.1 、line关键字所在的一行
用来提示代码是哪一出错了,直接点击前面的蓝色链接
当报错信息过长时,一般选择最后一个
2.2 、NameError错误的类型
2.3 、 name 'l1' is not defined
报错的原因,也是解决报错的答案
3 、异常的分类
3.1 、语法异常
不被容忍的,出现了要马上改过来,要不要钱走,要不然人走
3.2 、逻辑异常
可以出错,只要发生错误时,尽快改好就行
比如内置方法添加错误等,
4 、异常类型
NameError 名字发生错误
IndexError 索引错误
KeyError 键错误
ValueError 值错误
2 、异常处理实操
基本语法结构
try :
可能会发生报错的代码
except 错误的类型1 as e:
针对错的处理措施
except 错误的类型2 as e:
针对错的处理措施
except 错误的类型3 as e:
针对错的处理措施
try :
可能会发生错误的代码
except Exception as e:
统一的处理措施
异常处理使用准则:
1 、被检测的代码越少越好
2 、能尽量少用就少用
3 、异常处理了解
1 、与else 结合使用
当try 检测的代码没有发生异常时,正常运行完毕之后执行else 的子代码
结构:
try :
可能会出错的代码
except Exception as e:
处理的措施
else :
如果没有发生报错,则走else 的子代码
2 、结合finally 使用
不管try 检测的代码有没有异常,都会走finally 子代码
try :
name
except Exception as e:
print (e)
finally :
print ('芜湖' )
3 、全部整合到一起使用
try :
name
except Exception as e:
print (e)
else :
print ('芜湖起飞' )
finally :
print ('起飞' )
4 、断言
断言就是判断是不是健全的语句,如果错了直接崩溃
name = 'owen'
assert isinstance (name, str )
5 、主动报错
raise NameError('这错了昂' )
因为它是主动报错,使用就能知道在哪错的
六、for 循环的本质
info = {'name' : 'owen' , 'age' : 20 , 'pwd' : 123 }
1. 先转换成迭代器对象
res = info.__iter__()
res = iter (info)
while True :
print (res.__next__())
try :
print (next (res))
except StopIteration as e:
break
七、迭代取值与索引取值的对比
1 、索引取值:
优势:可以反复的获取相同的元素,且没有固定的方向
劣势:只能支持有序的容器类型,无序无法取值
2 、迭代取值:
优势:兼容所有容器类型
劣势:取值的顺序永远都是从左向右,但是没法重复获取
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」