目录
一、迭代器
1.迭代
(1) 迭代是一种操作,比如说 for 循环,逐个获取数据的这个过程就叫做迭代。
l1 = [1, 2, 3]
for i in l1:
print(i)
>>>输出结果:
1
2
3
2.可迭代对象
(1) 可迭代对象就是对象的一种特性,比如说列表[]、元组()、字典{}、文件对象以及字符串str,都是可迭代的。简单理解可以被for循环的,称之为可迭代对象。
l1 = [1, 2, 3]
d1 = (1, 2, 3)
c1 = {'a': 1, 'b': 2}
print([i for i in l1])
print([i for i in d1])
print([i for i in c1])
>>>输出结果:
[1, 2, 3]
[1, 2, 3]
['a', 'b']
3.迭代器
(1)迭代器是一种支持 next() 的对象,它包含了一组元素,当执行 next() 操作时,返回其中一个元素。
- 迭代器的作用:简化循环的代码并可以节约内存。
# 迭代器有两个基本的方法:iter() 和 next()
# 以一个列表中的元素来举例
l1 = [1, 2, 3]
a = iter(l1)
print(a)
print(next(a))
print(next(a))
print(next(a))
>>>输出结果:
<list_iterator object at 0x00000216E22A24C8> //现在就生成了一个列表 iterator指列表的迭代器
1
2
3
注意:不能够查询迭代器的长度,这是迭代器的特性,只能够通过 netx() 去不断的返回下一个元素。因此在运行 print(len(a)) 的时候会报错!!!
(2)当所有元素都被返回之后再执行 next() 的时候就会报错
l1 = [1, 2, 3]
a = iter(l1)
print(next(a))
print(next(a))
print(next(a))
print(next(a))
>>>输出结果:
1
2
3
Traceback (most recent call last):
File "D:/1017-test.py", line 6, in <module>
print(next(a))
StopIteration
(3)生成器是一种特殊的迭代器
# 特殊的迭代器:生成器
a = iter(i for i in range(3))
print(a)
print(next(a))
print(next(a))
>>>输出结果:
<generator object <genexpr> at 0x0000028012E076C8>
0
1
二、生成器
1.生成器
- 生成器本质上就是一个带 yiled 的函数,该记住了上一次返回时在函数中的位置。
- 比如:计数吃了多少苹果,第一次吃了两个苹果,计数为2。第二次吃了三个苹果,则在原来2的基础上开始计算,计数为5
- 生成器不仅“记住”了他的数据状态,生成器还记住了程序执行的位置。
- 生成器一定是可以迭代的,也一定时可迭代对象。反过来说,能够生成可迭代迭代对象的,就叫做生成器。
- 生成器的作用:节约大量内存
def creatGenerator():
mylist = range(3) # range():返回的是一个可迭代对象
for i in mylist:
yield i # yiled 有着和返回一个数值的功能类似于return,但是也仅仅是类似
data = creatGenerator()
print(data)
print(next(data))
print(next(data))
print(next(data))
>>>输出结果:
<generator object creatGenerator at 0x0000017993A49048>
0
1
2
2.生成器和迭代器的区别
- 生成器是生成元素的,迭代器是通过 next() 来访问迭代对象中元素的一种方式。
- 迭代器是一种支持 next() 操作的对象,迭代器是输出生成器的内容。
- 迭代器: 其中iterator对象表示的是一个数据流,可以把它看做一个有序序列,但我们不能提前知道序列的长度,只有通过 next() 获得下一个数据。
声明:以上内容仅供学习交流,如有错误欢迎指正!!!