当前位置 : 主页 > 编程语言 > python >

Python中迭代器的用法

来源:互联网 收集:自由互联 发布时间:2022-06-18
迭代器 ​1. 可迭代对象​ 对象:python中一切皆对象。一个实实在在存在的值就叫对象。比如:a = 1, a就叫对象。 可迭代:更新迭代。重复的、循环的一个过程。更新迭代每次都有新的


迭代器

​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



上一篇:Python-字符串学习笔记(完)
下一篇:没有了
网友评论