迭代器与生成器

一、迭代器:访问元素
两个方法:next()和iter()
字符串,列表或元组对象都可用于创建迭代器。

遍历元素:

list=[1,2,3,4]
it = iter(list)    #创建迭代器对象
for x in it:       #遍历元素
    print (x, end=" ")
1 2 3 4 

也可以使用next():

import sys         #引入 sys 模块
list=[1,2,3,4]
it = iter(list)    #创建迭代器对象
while True:
    try:           #遍历元素
        print (next(it))
    except StopIteration: #StopIteration异常用于标识迭代的完成,防止出现无限循环
        sys.exit()
1
2
3
4

二、生成器:在Python中,一边循环一边计算的机制,称为生成器:generator。
即生成器仅仅保存了一套生成数值算法,并且没有让这个算法现在就开始执行,而是我什么时候调用它,它什么时候开始计算一个新的值,并给你返回。

1.为什么要有生成器:
列表所有数据都在内存中,如果有海量数据的话将会非常耗内存。如果列表元素按照某种算法推算出来,那我们就可以在循环的过程中不断推算出后续的元素,这样就不必创建完整的list,从而节省大量的空间。
简单的说:我又想要得到庞大的数据,又想让它占用空间少,那就用生成器!

2.如何创建生成器
方法一:把一个列表生成式的[]改成(),就创建了一个generator
方法二:如果一个函数中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator。调用函数就是创建了一个生成器(generator)对象。

3.工作原理
(1)生成器(generator)能够迭代的关键是它有一个next()方法,工作原理就是通过重复调用next()方法,直到捕获一个异常
next 两种方式 t.next() 或 next(t),可用for 循环获取返回值(每执行一次,取生成器里面一个值)(基本上不会用next()来获取下一个返回值,而是直接使用for循环来迭代)
(2) yield相当于return返回一个值,并且记住这个返回的位置,下次迭代时,代码从yield的下一条语句开始执行。其作用和return的功能差不多,就是返回一个值给调用者,只不过有yield的函数返回值后函数依然保持调用yield时的状态,当下次调用的时候,在原先的基础上继续执行代码,直到遇到下一个yield或者满足结束条件结束函数为止。

import sys
 
def fibonacci(n): #生成器函数-斐波那契
    a, b, counter = 0, 1, 0
    while True:
        if (counter > n) : #直到counter>10退出
            return
        yield a          #返回值a,然后挂起函数,等待下一次调用
        a, b = b, a + b  #调用后会继续执行下去
        counter += 1
        
f = fibonacci(10) #调用生成器函数,f是一个迭代器,由生成器返回生成
 
while True:
    try:
        print (next(f), end=" ")
    except StopIteration:
        sys.exit()
0 1 1 2 3 5 8 13 21 34 55 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值