Python迭代器是啥?

简介: 迭代器:迭代的工具。迭代是更新换代,如你爷爷生了你爹,你爹生了你,迭代也可以说成是重复,并且但每一次的重复都是基于上一次的结果来的。如计算机中的迭代开发,就是基于软件的上一个版本更新。以下代码就不是迭代,它只是单纯的重复

迭代器:迭代的工具。迭代是更新换代,如你爷爷生了你爹,你爹生了你,迭代也可以说成是重复,并且但每一次的重复都是基于上一次的结果来的。如计算机中的迭代开发,就是基于软件的上一个版本更新。以下代码就不是迭代,它只是单纯的重复

while True:
    print('*'*10)

一、可迭代对象

python中一切皆对象,如

x = 1
name = 'nick'
lis = [1, 2]
tup = (1, 2)
dic = {'name': 'nick'}
s1 = {'a', 'b'}


def func():
    pass


f = open('49w.txt', 'w', encoding='utf-8)

对于这一切的对象中,但凡有__iter__方法的对象,都是可迭代对象。

# x = 1.__iter__  # SyntaxError: invalid syntax

# 以下都是可迭代的对象

name = 'nick'.__iter__
lis = [1, 2].__iter__
tup = (1, 2).__iter__
dic = {'name': 'nick'}.__iter__
s1 = {'a', 'b'}.__iter__
f = open('49w.txt', 'w', encoding='utf-8')
f.__iter__
f.close()

总结

可迭代的对象:Python内置str、list、tuple、dict、set、file都是可迭代对象。

特点:

内置有__iter__方法的都叫可迭代的对象。

二、迭代器对象

只有字符串和列表都是依赖索引取值的,而其他的可迭代对象都是无法依赖索引取值的。因此我们得找到一个方法能让其他的可迭代对象不依赖索引取值。

在找到该方法前,首先我们给出迭代器对象的概念:可迭代的对象执行__iter__方法得到的返回值。并且可迭代对象会有一个__next__方法。

  • 不依赖索引的数据类型迭代取值
dic = {'a': 1, 'b': 2, 'c': 3}
iter_dic = dic.__iter__()
print(iter_dic.__next__())
print(iter_dic.__next__())
print(iter_dic.__next__())
# print(iter_dic.__next__())  # StopIteration:

输出

a
b
c
  • 依赖索引的数据类型迭代取值
lis = [1, 2, 3]
iter_lis = lis.__iter__()
print(iter_lis.__next__())
print(iter_lis.__next__())
print(iter_lis.__next__())
# print(iter_lis.__next__())  # StopIteration:

输出

1
2
3

上述的方法是非常繁琐的,我们可以使用while循环精简下。
其中使用的try...except...为异常处理模块,以后会详细讲解。

s = 'hello'
iter_s = s.__iter__()
#学习中遇到问题没人解答?小编创建了一个Python学习交流群:711312441
while True:
    try:
        print(iter_s.__next__())
    except StopIteration:
        break

输出

h
e
l
l
o

总结

迭代器对象:执行可迭代对象的__iter__方法,拿到的返回值就是迭代器对象。

特点:

  • 内置__next__方法,执行该方法会拿到迭代器对象中的一个值
  • 内置有__iter__方法,执行该方法会拿到迭代器本身
  • 文件本身就是迭代器对象。

缺点:

  • 取值麻烦,只能一个一个取,并且只能往后取,值取了就没了
  • 无法使用len()方法获取长度

三、for循环原理

for循环称为迭代器循环,in后必须是可迭代的对象。

lis = [1, 2, 3]
for i in lis:
    print(i)

输出

1
2
3

因为迭代器使用__iter__后还是迭代器本身,因此for循环不用考虑in后的对象是可迭代对象还是迭代器对象。

由于对可迭代对象使用__iter__方法后变成一个迭代器对象,这个迭代器对象只是占用了一小块内存空间,他只有使用__next__后才会吐出一个一个值。如lis = [1,2,3,4,5,...]相当于一个一个鸡蛋,而lis = [1,2,3,4,5,...].__iter__相当于一只老母鸡,如果你需要蛋,只需要__next__即可。

print(range(10))  # range(0, 10)
相关文章
|
29天前
|
开发者 Python 容器
深入理解Python迭代器:迭代机制的核心与应用
本文介绍了Python迭代器的核心概念、工作原理和应用场景。迭代器是遍历容器类型数据结构(如列表、元组、字典和集合)的对象,遵循迭代器协议,具有记忆遍历位置和一次性特点。通过实现迭代器协议,开发者能为自定义类型定义迭代行为,实现高效处理大量数据和与其他迭代工具协同工作。迭代器与可迭代对象的区别在于,可迭代对象实现`__iter__()`方法,返回迭代器,而迭代器实现`__next__()`方法,用于逐个访问元素。理解并运用迭代器能提升Python代码的性能和可读性。
|
1月前
|
算法 大数据 Python
Python生成器:优雅而高效的迭代器
Python生成器:优雅而高效的迭代器
|
2月前
|
索引 Python 容器
解释Python中的迭代器和生成器的优势和劣势。
解释Python中的迭代器和生成器的优势和劣势。
35 2
|
2月前
|
传感器 数据库 Python
Python生成器和迭代器
Python生成器和迭代器
|
8天前
|
缓存 大数据 数据处理
Python迭代器、生成器和装饰器探究
【4月更文挑战第2天】 迭代器是遍历集合元素的对象,实现`__iter__()`和`__next__()`方法。示例中自定义迭代器`MyIterator`用于生成整数序列。 - 生成器简化了迭代器实现,利用`yield`关键词实现状态保存,减少内存占用。示例中的`my_generator`函数即为一个生成器。 - 装饰器用于修改函数行为,如日志记录、性能分析。装饰器`my_decorator`在函数调用前后添加额外代码。
23 0
|
9天前
|
大数据 数据处理 开发者
深入理解Python中的迭代器和生成器
Python中的迭代器和生成器是实现高效循环和处理大型数据集的重要工具。本文将深入探讨迭代器和生成器的概念、原理以及在实际开发中的应用场景,帮助读者更好地理解和利用这些强大的工具。
|
12天前
|
存储 大数据 Python
「Python系列」Python迭代器与生成器
Python迭代器是一个可以记住遍历的位置的对象。迭代器对象必须实现两个方法,`__iter__()` 和 `__next__()`。字符串、列表或元组等数据类型都是可迭代对象,但它们不是迭代器,因为它们没有实现 `__next__()` 方法。
14 0
|
22天前
|
人工智能 机器人 测试技术
【Python】Python迭代器与生成器的区别(详细讲解)
【Python】Python迭代器与生成器的区别(详细讲解)
【Python】Python迭代器与生成器的区别(详细讲解)
|
1月前
|
Python
在Python中,如何创建一个迭代器?
【2月更文挑战第24天】【2月更文挑战第81篇】在Python中,如何创建一个迭代器?
|
1月前
|
Python
请解释Python中的迭代器和生成器的区别?并分别举例说明。
【2月更文挑战第24天】【2月更文挑战第80篇】请解释Python中的迭代器和生成器的区别?并分别举例说明。

热门文章

最新文章