Day16
总结
常见内置函数
# 1.help() 查看注释信息
help(len) # len(obj, /) Return the number of items in a container.
# 2.id() 返回内存地址
print(id('a')) # 2931719462448
# 3.int() 类型转换
# 4.isinstance() 判断数据类型
print(isinstance(1, str)) # False
# 5.pow() 幂
print(pow(3,2)) # 9
# 6.round() 四舍五入
print(round(5.57, 1)) # 5.6 第二个参数控制需要保留几位小数
# 7.sum() 求和
print(sum([1, 2, 3, 4, 5])) # 15
可迭代对象
# 1.迭代是什么
迭代其实是更新换代 每一次迭代的过程都需要依赖于上一次的结果
# 迭代取值
l1 = [1, 2, 3, 4, 5]
n = 0
while n < len(l1):
print(l1[n])
n += 1
# 2.可迭代对象
内置有__iter__方法(双下iter方法)
# 3.那些数据是可迭代对象
字符串,列表,元组,集合,字典,文件等
# 可以通过调用的方式来验证
# 可迭代对象其实就是为了后续迭代取值做准备,提供了依赖于索引取值的方式
迭代器对象
# 1.迭代器对象
可迭代对象调用__iter__方法之后生成的结果就是迭代器对象
可以使用for循环遍历出所有元素的都可以称为可迭代对象,列表、元组、字符串、字典等都是可迭代对象,迭代器一定是可迭代对象,反之不一定成立,如字符串
# 2.迭代器对象的特征
含有__iter__方法和__next__方法
'''
迭代器对象能极大节省存储空间
类似于哆啦A梦的口袋 不用的时候就是一个口袋的面积 用的时候可以从中取出很多数据
'''
# 3.取值
调用__next__方法,取完了则会直接报错
# 迭代器对象取值时,要将可迭代对象先转换成迭代器对象,否则每次迭代都会是同一个值
# 一些可迭代对象本身也是迭代器对象:文件对象
s = 'abc'
print(s.__iter__().__next__()) # a
print(s.__iter__().__next__()) # a
print(s.__iter__().__next__()) # a
res = s.__iter__()
print(res.__iter__().__next__()) # a
print(res.__iter__().__next__()) # b
print(res.__iter__().__next__()) # c
for循环内部原理
for循环底层原理
for 变量名 in 可迭代对象:
循环体代码
'''
将in后面的数据通过调用__iter__()的方式变成迭代器对象
文件对象可以for循环的原因是文件对象本身就是迭代器对象 再次调用不变
针对产生的迭代器对象依次调用__next__()方法迭代取值
值取完之后 自动处理报错并退出循环
'''
异常(BUG)处理
# 异常信息的组成
'''
Traceback (most recent call last): # 1
File "D:/pythonDay01/day16.py", line 20, in <module>
print(name)
NameError: name 'name' is not defined # 2, 3
'''
1.line关键字
定位出错的位置 # 如果报错的信息很长 一般看最后一个
2.错误的类型__Error
3.报错原因
# 异常的分类
1.语法异常
最好别犯,后果很严重
2.逻辑异常
尽快修改即可
# 异常的类型
print(name) # NameError: name 'name' is not defined 名字错误
l1 = [1, 2, 3, 4, 5]
print(l1[5]) # IndexError: list index out of range 索引错误
# KeyError 键错误
# ValueError 值错误
异常处理实操
# 抛出异常
# 提前做出处理措施,避免程序停止
try:
可能会出错的代码
except 错误的类型1 as e: # e指代错误的提示信息
针对性的处理措施
except 错误的类型2 as e:
针对性的处理措施
# 万能异常
try:
代码
except Exception as e:
处理措施
# 异常处理准则
被检测的代码越少越好,能尽量少用就尽量少用
# 结合else使用
try:
代码
except Exception as e:
处理措施
else:
若没出错,走else代码
# 结合finally使用
无论try检测的代码是否有异常 最后都会执行finally子代码
# 主动报错
raise IndexError('1') # 自定义错误类型
for循环的本质
# 通过while与异常捕获实现for循环
l1 = [1, 2, 3, 4, 5]
res = iter(l1) # 转化为迭代器对象
while True:
try:
print(next(res))
except StopIteration as e:
break
迭代取值与索引取值的对比
# 索引取值
优点:可以反复获取相同元素,方向不固定
缺点:只支持有序容器类型,兼容性比不上迭代取值
# 迭代取值
优点:兼容读高,兼容所有容器类型
缺点:取值顺序固定(从左到右),无法重复获取
今天学的有点绕,多记记,明天周四
:

浙公网安备 33010602011771号