可迭代对象
什么是可迭?
言外之意就是更新换代,每次的更新都是依赖上一次的结果
什么是可迭代对象
就是内置有__iter__()方法的都可以称之为可迭代对象
内置:内部自带可以直接使用的
八种数据类型
可迭代对象:
字符串、列表、元组、字典、集合、文本对象
整型、浮点型、布尔型都不是
代码
可迭代对象调用__iter__方法就变成‘迭代器对象’
d = [1, 2, 3] res = d.__iter__() print(res) # <list_iterator object at 0x0000021FA1D193F0>
一般情况下,双下划线开头都方法都有一个预支对应的简化方式 名字+()
迭代器对象
什么是迭代器对象
既内置iter()又内置了next()方法就是迭代器对象
文件对象本身就具备__iter__()和__next__()方法,即是可迭代对象又是迭代器对象
迭代器对象数据类型
str、list、dict、tuple、set、文件等
迭代器对象作用
其实就是一种不依赖于索引取值的方式
可迭代对象多次调用__iter__()方法之后还是迭代器对象,所以你只需要调用一次即可
d = [1, 2, 3] d.__iter__().__iter__().__next__() print(d.__iter__().__iter__().__next__())
d = [1, 2, 3] res=d.__iter__() print(res.__next__()) print(res.__next__()) print(res.__next__()) # 打印值为123
易错题
d = [1, 2, 3] res = d.__iter__() print(res.__next__()) print(res.__next__()) print(res.__next__()) # 打印值为123 print(d.__iter__().__next__()) print(d.__iter__().__next__()) print(d.__iter__().__next__()) # 打印结果111 # 循环取出里面的值,iter()一次即可,多次iter()打印取出都是同一个值
异常捕捉
什么是异常
错误发生的信息,如不对此处理,那么以后的程序不能正常运行
异常的分类
1. Traceback
是异常所在的位置,一般情况我们直接可以定位到异常发生的位置所在
2. XXXError
错误的类型
3. XXXError后面的详细信息
重要,一般情况我们直接看错误发生的详细信息
4. 异常类型
语法错误
坚决不允许,容易解决,在Python编辑器就可以定位到
逻辑错误
是被允许出现的,但是我们写代码时,尽量避免逻辑错误发生
3.错误类型
错误的类型 print(name) # NameError l = [1,2,3,4] print(l[5]) # IndexError d = {'a':1} print(d['b']) # KeyError 1/0 # ZeroDivisionError
4.如何解决异常
语法结构
try 被监测的代码:一般是可能会发生的错误 except 错误类型1 as e print(e) except 错误类型2 as e print(e) except 错误类型3 as e print(e) except 错误类型4 as e print(e)
try: # print(name) # 1/0 # l = [1,2,3] # print(l[6]) # 1/0 d = {'a':1} print(d['aaa']) except NameError as e: print(e) # name 'name' is not defined except IndexError as e: print(e) # name 'name' is not defined except Exception as e: print(e) else: print('看一下else什么时候走的?') finally: print('看一下finally什么时候走?')
没有异常else会走,有异常else不会走
finally不管有没有异常都会走
try: pass except NameError: pass try: pass finally: pass # 这里面你只需要记住try和else不能单独使用,
assert:断言
assert 条件 条件必须成立,如果不成立,代码在这一行直接中断
for循环的原理
l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14] # 循环打印出列表中的每一个元素,但是不能使用for循环,必须要使用__next__()取值 res = l.__iter__() while True: try: print(res.__next__()) except Exception: break for j in l: print(j) count = 0 while count < len(l): if count == len(l): break else: # print(l[count]) # count += 1 print(res.__next__()) count += 1
for循环的原理
1.先把关键字in后面的可迭代对象先调用inter()
2.while循环,next()取值
3.for的内部当出现异常的时候,做捕捉处理: stopiteration break
迭代取值和索引取值
迭代取值
1.不依赖索引取值
2.只能从左往右依次取值,不能重复取值
索引取值
1.必须依赖索引取值
2.可以重复取值
3.必须容器类型数据
标签:__,.__,迭代,17,Python,基础,iter,next,print From: https://www.cnblogs.com/shanghaipudong/p/17451975.html