迭代器

迭代器

迭代

指的是重复迭代,每一次迭代都是基于上一次的结果而来的

迭代器

迭代器指的是迭代取值的工具,它可以迭代取值

可迭代对象

str , list , dict , set , tuple , 文件open('a.txt')

所有的序列类型,凡是内部有.__iter__()内置方法的都是可迭代对象

获取迭代器

可迭代对象.__iter__()  得到的返回值就是“迭代器对象”

迭代器如何取值

迭代器对象.__next__()  每执行一次都会从跌打器对象中去走一个值
s = "迭代器"
str_iter = s.__iter__()
print(str_iter.__next__())
print(str_iter.__next__())
print(str_iter.__next__())
# print(str_iter.__next__())  # 多执行一次就会报错StopIteration,因为迭代器中的值已经取完了
>>>
迭
代
器

可迭代对象 vs 迭代器对象

1、获取可迭代对象:直接定义序列类型(str , list , tuple , dict , set , f)

特点:内置有__ iter __()

2、获取迭代器对象:通过可迭代对象调用得到返回值,可迭代对象.__ iter __()

特点:内置有__ next __()

迭代器对象的优点

优点:

​ 1、不依赖索引迭代取值

​ 2、节省内存空间

缺点:

​ 1、取指定某个值麻烦

​ 2、每次取值都要从第一个值开始,无法通过索引取值

​ 3、无法获取长度

for循环原理

语法:for i in 可迭代对象:

in:可迭代对象--->内部会自动调用.__ iter__()--->迭代器对象

用 for i in 可迭代对象:就是调用迭代器对象.__ next__()

for循环内部也会有一个捕获异常机制,一旦遇到异常也会停止取值。

list1 = [1, 2, 3, 4]
for line in list1:  # list1是可迭代对象 ----> 内部会自动调用.__iter__() ---> 迭代器对象
    # 迭代器对象.__next__()
    print(line)

迭代器本质上是一个可迭代对象

文件既是可迭代对象,也是迭代器对象

可迭代对象不一定是迭代器对象

try: / except StopIteration:

迭代器取值当取完后并不知道,多取一次就会报错,因此我们用try:和except StopIteration:防止报错

# 如果没有使用try
list1 = [1, 2, 3, 4]
list1_iter = list1.__iter__()
while True:
    print(list1_iter.__next__())
>>>
1
Traceback (most recent call last):
2
3
  File "E:/Python/练习/迭代器.py", line 25, in <module>
4
    print(list1_iter.__next__())
StopIteration
# 使用try
list1 = [1, 2, 3, 4]
list1_iter = list1.__iter__()
while True:
    try:
        print(list1_iter.__next__())
    except  StopIteration:
        break
>>>
1
2
3
4
posted @ 2019-11-13 23:35  Mr沈  阅读(192)  评论(0编辑  收藏  举报