Python迭代器和生成器的区别

目录

一、迭代器

1.迭代

2.可迭代对象

3.迭代器

二、生成器

1.生成器

2.生成器和迭代器的区别


一、迭代器

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() 获得下一个数据。

声明:以上内容仅供学习交流,如有错误欢迎指正!!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值