python学习笔记之迭代器和生成器

PYTHON 学习笔记之迭代器与生成器

迭代器
访问集合元素的一种方式
一般方法分为两种 iter() 和 next()
下面的代码实验简单的迭代

list = [0,1,2,3,4,5]    # 创建一个列表
i = iter(list)    # 使用iter()创建一个迭代器
print(next(i))    # 使用next()输出迭代器的元素
print(next(i))
# 也可以使用循环来遍历
# 这里要注意到下面的遍历开始的起点是2
# 因为上面两个next使迭代器中指向的元素前进了两位
for x in i:
    print(x,end=',')

输出结果:

0
1
2,3,4,5,

生成一个迭代器
这里涉及面向对象编程已经类的创建,这部分内容下次再详细讲解

生成器
在python中,使用了yield的函数成为生成器
它只能返回迭代器,只能用于迭代操作
在调用生成器的时候,每次遇到yield,函数就会暂停并保存当前所有的运行信息,返回yield的值,并在下一次执行next()方法时从当前位置继续运行

简单的使用yield实现斐波那契数列

import sys


def fib(n):  # 生成器函数 用于生成斐波那契数列
    a, b, c = 0, 1, 0
    while True:
        if (c > n):
            return  # 循环出来的条件
        yield a    # 保存运行到这里程序的状态,并将a的值返回
        # 并且下一次进入时从上一次保存的状态往下运行
        # 对于这个函数来说就是保存了上一次a,b,c的值
        a, b = b, a + b
        c += 1


f = fib(5)

while True:
    try:
        print(next(f), end=",")
        # 这里print的值相当于每次yield的a值
    except StopIteration:# 抛出异常结束
        sys.exit()

输出结果:

0,1,1,2,3,5,

总结
一个带有 yield 的函数就是一个 generator,它和普通函数不同,生成一个 generator 看起来像函数调用,但不会执行任何函数代码,直到对其调用 next()(在 for 循环中会自动调用 next())才开始执行。虽然执行流程仍按函数的流程执行,但每执行到一个 yield 语句就会中断,并返回一个迭代值,下次执行时从 yield 的下一个语句继续执行。看起来就好像一个函数在正常执行的过程中被 yield 中断了数次,每次中断都会通过 yield 返回当前的迭代值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

国家一级假勤奋研究牲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值