迭代器和生成器

一、迭代器

1、迭代器(iter)

迭代器是容器型数据类型,只能通过类型转换和生成器来获得迭代器对象

迭代器存储数据的特点:同时可以保存多个数据,没有办法直接查看,而是需要先将数据从迭代器中取出来
(取出来不能再放回去,不保存就直接销毁了)

注:所有容器都可以转换成迭代器

2、获取迭代器中的元素

1) 遍历

例:

iter2 = iter([1, 2, 3, 4, 5])
for x in iter2:
    print(x)
print(list(iter2))

2)获取单个元素(next())

next(迭代器对象) - 获取迭代器中的一个元素(当前最前面的那个元素)
迭代器对象.next() - 获取迭代器的一个元素(当前最前面的那个元素)

例:

iter3 = iter({'name': '张一', 'age': 18, 'gender': '男'})
print(next(iter3))  # name
print(next(iter3))  # age
print(next(iter3))  # gender

注:迭代器嵌套字典取得是键(key)

二、生成器

1、生成器

a、 概念1
生成器就是迭代器

b、 概念2
调用一个带有yield关键字的函数就可以得到一个生成器

def func1():
    print('+++++++++')
    print('---------')
    yield


result = func1()
print(result)      # <generator object func1 at 0x0000018BA4C22B88>

2、生成器产生数据(生成器中的元素是怎么生成的)

生成器能生产多少数据就看执行生成器对应的函数对应的函数的函数体会遇到几次yield;
yield后面的表达式的值就是生成器能够产生的数据

例:创建一个生成器可以产生3个数据分别是:10,20,30

def create_gender1():
    yield 10
    yield 20
    yield 30


gen1 = create_gender1()
print(list(gen1))  # [10, 20, 30]

3、生成器产生数据的原理

获取生成器元素的时候,会自动调用生成器关联函数。第一次从函数开始的地方开始执行,直到遇到yield为止,并且yield后面的值作为获取到的数据;后面每次都是从上一次结束的位置开始执行,直到遇到yield,如果从开始执行到函数结束都没有遇到yield就不会产生数据(如果使用next去取数据这个时候会报错)

例:

def create_gender2():
    for x in range(100, 150):
        yield x


gen2 = create_gender2()
print(list(gen2))

# [100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149]

4、生成式

生成式就是生成器的简写

列表推导式[]变成()就变成了生成式

例:

list1 = [x+2 for x in range(5)]
print(list1)


gen1 =(x+2 for x in range(5))
print(gen1)
print(next(gen1))        # 2
print(next(gen1))        # 3
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值