Python中迭代器的用法

迭代器

1. 可迭代对象

对象:python中一切皆对象。一个实实在在存在的值就叫对象。比如:a = 1, a就叫对象。
可迭代:更新迭代。重复的、循环的一个过程。更新迭代每次都有新的内容。

字面意思:可以进行循环更新的一个实实在在的值。
专业角度:内部含有__iter__方法的对象称之为可迭代对象。

  • 获取对象的所有方法并且以字符串的形式表现:dir()
 # 获取一个对象的所有方法
 s1 = 'lucy'
 print(dir(s1))
  • 判断一个对象是否是可迭代对象
 '__iter__' in dir(对象)

使用可迭代对象的优点:

  • 存储的数据直接能显示,比较直观
  • 拥有的方法比较多

缺点:

  • 占用内存
  • 不能直接通过for循环,不能直接取值(索引,key除外)
li = [1, 2, 3]
for i in li:
    print(i)
# 看似列表可以for循环直接取值,其实不是的。里面进行了一步转化,把可迭代对象转化成了迭代器。可迭代对象不能直接取值。

2. 迭代器

  • 迭代器的定义

    • 字面意思:更新迭代,器:工具。可更新迭代的工具。
    • 专业角度:内部含有__iter__方法并且含有__next__方法的对象就是迭代器。
  • 判断是否是迭代器

('__iter__' in dir(对象)) and ('__next__' in dir(对象))
with open('text', 'w', encoding='utf8') as file:
    print(('__iter__' in dir(file)) and ('__next__' in dir(file)))  # True
  • 可迭代对象可以转化成迭代器
s = 'lucy'
obj = iter(s)  # s.__iter__()
print(next(obj))  # print(obj.__next__())
  • 迭代器优点

    • 节省内存。迭代器在内存中相当于只占一个数据的空间。因为每次取值时上一条数据会在内存释放,加载当前的这条数据。
    • 惰性机制。next一次,取一个值,绝不过多取值。
  • 迭代器的缺点

    • 速度慢,不能直观的查看里面的数据。
    • 取值时不走回头路,只能一直向下取值。
    li = [11, 22, 33, 44, 55, 66, 77, 88, 99]
    obj = iter(li)
    for i in range(3):
        print(next(obj))
    for i in range(4):
        print(next(obj))
    
  • 可迭代对象与迭代器对比

    • 可迭代对象拥有的方法比较多,操作灵活(比如列表,字典的增删改查,字符串的常用操作方法等),比较直观,存储数据相对少(几百万个对象,8G内存是可以承受的),但是占用内存,而且不能直接通过循环迭代取值。
    • 侧重于对数据灵活处理,并且内存空间足够,将数据集设置为可迭代对象是明确的选择。
    • 迭代器非常节省内存,可以记录取值位置,可以直接通过循环+next方法取值,但是不直观,操作方法比较单一。
    • 当数据量过大,大到足以撑爆内存或者以节省内存为首选因素时,将数据集设置为迭代器是一个不错的选择。
  • while循环模拟for循环机制

li = [11, 22, 33, 44, 55, 66, 77, 88, 99]
obj = iter(li)
while 1:
    try:
        print(next(obj))
    except StopIteration:
        break
发布了31 篇原创文章 · 获赞 48 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/mall_lucy/article/details/104731392
今日推荐