Python基础笔记——迭代器和生成器

迭代器

  1. 迭代是python最强大的功能之一,是访问集合元素的一种方式
  2. 迭代是一个可以记住遍历位置的对象
  3. 迭代器的对象是从集合的第一个对象开始访问,知道访问结束,且迭代器只前不退
  4. 迭代器的基本方法:iter() 和 next()

可迭代对象的本质就是可以向我们提供一个这样的中间“人”即迭代器帮助我们对其进行迭代遍历使用。
可迭代对象通过__iter__方法向我们提供一个迭代器,我们在迭代一个可迭代对象的时候,实际上就是先获取该对象提供的一个迭代器,然
后通过这个迭代器来依次获取对象中的每一个数据。

list = [1, 2, 3, 4, 5]		# 创建列表
l = iter(list)	# 创建迭代器
print(next(l))	# 输出元素(第一个)	1
print(next(l))	# 输出元素(第二个)	2
print(next(l))	# 输出元素(第三个)	3
迭代器也可以使用for循环进行遍历输出所有元素
list = [1, 2, 3, 4, 5]	# 创建列表
l = iter(list)	# 创建迭代器
for i in l:		# 循环遍历
    print(i, end=' ')	# 输出循环后数据,end站位空格
# 结果:1 2 3 4 5

# next函数
list = [1, 2, 3, 4, 5]	# 定义列表
l = iter(list)	# 创建迭代器
while True:		# 无限循环
    try:		# 判断
        print(next(l))	# 输出
    except StopIteration:	# 防止报错StopIteration
        sys.exit()
# 结果:1 2 3 4 5

创建迭代器

  • 创建一个迭代器需要在类中使用__iter__()与__nect__()方法。注意:是两个_
  • init()方法:返回一个特殊的迭代器对象,这个对象实习了__next()__方法,并且通过Stoplteration异常提示完成
  • next()方法:返回下一个迭代器对象
class MyNumbers:
    def __iter__(self):
        self.a = 1
        return self
    def __next__(self):
        x = self.a
        self.a += 1
        return x
myclass = MyNumbers()
myiter = iter(myclass)
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
# 结果:1 2 3 4

Stoplteration

StopIteration 异常用于标识迭代的完成,防止出现无限循环的情况,在 next() 方法中我们可以设置在完成指定循环次数后触发 StopIteration 异常来结束迭代。
class MyNumbers:	# 定义函数
    def __iter__(self):
        self.a = 1
        return self

    def __next__(self):
        if self.a <= 6:	# 定义循环次数
            x = self.a
            self.a += 1
            return x
        else:
            raise StopIteration	# 报蹉返回
myclass = MyNumbers()	# 传递函数值
myiter = iter(myclass) # 定义迭代器
for x in myiter:	# 循环遍历并输出
    print(x)
# 结果:1 2 3 4 5 6

生成器

  • python中使用yield方法定义生成器,只能用于迭代操作,简单说就是生成一个迭代器
  • 运行生成器时,遇到yield函数会暂停并保存当前信息,在下一次执行next()方法时从当前位置继续运行。
# 生成斐波那契数列
import sys	# 导入sys
def fibonacci(n):  # 生成器函数 - 斐波那契
    a, b, counter = 0, 1, 0	# 定义数
    while True:			# 无限循环
        if (counter > n):	# 循环判断
            return			# 返回空
        yield a		# 生成器
        a, b = b, a + b	# 定义
        counter += 1	# 自增
f = fibonacci(10)  # f 是一个迭代器,由生成器返回生成
while True:# 无限循环
    try:	# 无错误信息
        print(next(f), end=" ")	# 输出结果
    except StopIteration:	# r如要报StopIteration错
        sys.exit()

斐波那契数列(Fibonacci sequence),又称黄金分割数列、兔子数列,是数学家列昂纳多·斐波那契于1202年提出的数列。斐波那契数列为1、1、2、3、5、8、13、21、34……此数列从第3项开始,每一项都等于前两项之和,递推公式为F(n)=F(n-1)+F(n-2),n≥3,F(1)=1,F(2)=1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值