迭代器

迭代: 器:工具

可迭代对象

list,dict,str,set,tuple -- 可迭代对象 使用灵活

方法一:

list.__iter__()
dict.__iter__()
str.__iter__()
set.__iter__()
tuple.__iter__()

方法二:查看源码

方法三:

print("__iter__" in dir(list))

官方声明只要具有__iter__方法的就是可迭代对象

可迭代对象的优点:

1、使用灵活

2、直接查看值

可迭代对象的缺点:

1、消耗内存

list,tuple,str -- 索引
dict -- 键
set -- 直接取值

迭代器:

官方声明只要具有__iter__()方法 next()方法就是迭代器

f = open("xxx", "w")
f.__iter__()
f.__next__()

将可迭代对象转换成迭代器

lst = [1, 2, 3, 4, 5]
new_lst = lst.__iter__()  # 将可迭代对象转换成迭代器
new_lst.__iter__()
new_lst.__next__()

s = "yulin"
new_str = s.__iter__()
print(new_str)
new_str.__iter__()
new_str.__next__()

s = "yulin"
new_str = s.__iter__()
new_str.__iter__()
print(new_str.__next__())
print(new_str.__next__())
print(new_str.__next__())

for循环的原理(更改版):

s = "yulin"
s = [1, 2, 3, 4, 5, 6, 7, 8]
count = len(s)
new_s = s.__iter__()
while count:
    print(new_s.__next__())
    count -= 1

s = "yulin"
new_s = s.__iter__()
print(new_s.__next__())
print(new_s.__next__())
print(new_s.__next__())
print(new_s.__next__())
print(new_s.__next__())
print(new_s.__next__())  # 超过就报错

for循环真实本质:

s = "yulin"
new_s = s.__iter__()
while True:
    try:
        print(new_s.__next__())
    except StopIteration:
        break
  except Exception:  # 面试不用
      print("我是万能的!")
      break

总结:

可迭代对象:

优点:使用灵活,可以直接查看值

缺点:占内存

迭代器:

优点:节省内存,惰性机制

缺点:使用不灵活,操作比较繁琐,不能直接查看元素

迭代器的特性:

1、一次性的(用完就没了)

2、不能逆行(不能后退)

3、惰性机制(节省内容)

什么是可迭代对象:

具有很多私有方法,具有__iter__()方法的就是一个可迭代对象

什么是迭代器:

具有__iter__()方法和__next__()方法的就是迭代器

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

迭代器什么时候使用:当容器中数据量较大的时候使用迭代器

posted @ 2020-10-22 19:59  Ylinn  阅读(73)  评论(0)    收藏  举报