常见内置函数补充与迭代器认知
目录
一.常见内置函数补充
1.help() 查看注释信息
hele(len) #len(obj, /)
2.id() 可查看内存地址(返回的是数字)
print(id('thn')) #31105520
3.int() 整型类型转换 进制转换
4.isinstance() 判断数据类型
print(isinstance('thn', str) srt字符串 返回True
print(isinstance(123, str)) 不是字符串 返False
5.pow() 幂指数(次方)
print(pow(10,2)) #100
6.round() 四舍五入
print(round(50.333, 0)) # 50
print(round(50.333, 1)) # 50.3
print(round(50.333, 2)) # 50.33
7.sun() 求和
print(sum([50, 50, 20, 10, 10, 20])) # 160

二.迭代器可迭代对象
"""迭代器就像更新换代一样,每次更新都基于上次更新后的结果"""
1迭代取值(相同于for循环取值)

2.迭代对象
"""在内资方法里有__iter__的方法称为可迭代对象"""
也可用(.)的方式查询
3.那些数据属于可迭代对象
"""基于for循环内还有一个文件对象也支持for循环"""
"""字典,列表,元组,集合,字符串,文件对象其实就是另一种所引取值方式"""
三.迭代器对象
1.迭代器对象:可迭代对象调用__iter__方法之后生成的结果就是迭代器对象
2.迭代器对象特征:含有__iter__方法和__next__方法
3.迭代器对象如何取值:__next__方法 取完就报错。for循环其实就是一种不需要索引取值的方式底层就是迭代器对象
4.可迭代对象调用依次__iter__方法编程迭代器对象 如果继续调用__next__结果还会是迭代器对象本身


3.1迭代取值与索引取值的对比
1.索引取值
优势:可以反复获取相同的元素 并且没有固定的方向
劣势:只能支持有序的容器类型 无序的无法取值兼容性没有迭代取值高
2.迭代取值
优势:兼容所有的容器类型
劣势:取值的顺序永远都是从左往右 并且无法重复获取 去完就完了
"""迭代器里的东西是固定的,每取一个就会少一个取完就开空了"""
三.for循环内部原理
for循环底层原理
for 变量名 in 可迭代的对象(需要循环的对象):
循环体代码
1.将in后的数据调用__iter__()变成迭代器对象
2.针对产生的迭代器对象依次调用__next__()方法迭代取值
"""也就是依次取出赋予变量名"""
3.当值取完后 会自动处理报错自己退出循环
例题
l1 = [11, 22, 33, 44, 55, 66, 77, 88]
将l1内元素挨个打印出来不用for循环
res = iter(l1) # ser = l1.__iter__
n = 0
while n < len(l1):
print(next(res)) # print(res.__next__)
n += 1
将l1内元素挨个打印出来
四.for循环的本质
# 利用while与异常捕获 实现for循环的功能
info = {'name': 'jason', 'age': 18, 'pwd': 123}
1.先转换成迭代器对象
res = info.__iter__()
res = iter(info)
2.迭代取值
while True:
# print(res.__next__())
try:
print(next(res))
except StopIteration as e:
# 结束while循环
break
字典用for循环只能取键不能取值
结果:
name
age
pwd

五.异常处理
1.什么是异常:就是代码运行出错异常会导致程序立即停止
俗称>>>:bug
2.异常的组成部分

3.异常分类
1.语法异常:同等于函数括号后不加冒号等def func()
2.逻辑异常:如果所示出现红色的异常框
3.异常分类:
NameError 名字异常
IndexError 索引错误
KeyError 键错误
ValueError 值错误
等等
六.异常处理
1.编写代码的同时肯定会碰到一些自己不确定是否出错的地方,会直接导致程序停止,但也可以通过代码来临时补漏避免程序的停止
2.基本语法
try:
可能会出错的代码
except 错误的类型 as e: # e指代的就是错误的提示信息
针对性的处理措施
可再往下嵌套
3.万能异常处理
try:
可能会出错的代码
except Exception as e:
统一处理
"""能不少用就不用"""
七.异常结合其他代码使用
# 1.结合else使用
当try检测的代码没有发生异常 正常运行完毕之后执行else的子代码
try:
可能会出错的代码
except Exception as e:
统一的处理措施
else:
可能会出错的代码没有出错 最后走else子代码
# 2.结合finally使用
无论try检测的代码是否有异常 最后都会执行finally子代码
try:
name
except Exception as e:
print(e)
finally:
无论try检测的代码是否有异常 最后都会执行finally子代码
# 3.全部整合到一起使用
try:
name
except Exception as e:
print(e)
else:
print('没报错 好极了')
finally:
print('管你错不错 都执行')
# 4.断言(了解中的了解)
name = 'jason'
assert isinstance(name,str)
# 5.主动报错(需要掌握)
raise NameError('不爽 就要作!!!')
'''由于是主动报错 所以可以非常明确的知道错误的类型'''


浙公网安备 33010602011771号