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

迭代取值与索引取值的对比

# 索引取值
	优点:可以反复获取相同元素,方向不固定
    缺点:只支持有序容器类型,兼容性比不上迭代取值
    
# 迭代取值
	优点:兼容读高,兼容所有容器类型
    缺点:取值顺序固定(从左到右),无法重复获取

今天学的有点绕,多记记,明天周四
:

posted @ 2022-03-23 19:33  有梦想的阿九  阅读(33)  评论(0)    收藏  举报