魔法方法——迭代器

本文介绍了Python中迭代器的基本概念及其使用方法,并通过实例展示了如何利用迭代器实现斐波那契数列及生成指定范围内的所有闰年。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

读书笔记:

iterator 是迭代器。
迭代器有两种方法:
iter(可迭代的对象):返回一个迭代器
next(迭代器): 返回迭代器的下一个元素,若果迭代器为空,将引发StopIteration

演示:

>>> string = "zss041962"
>>> iter(string)
<str_iterator object at 0x0000000002F53B38>
>>> iter(range(10))
<range_iterator object at 0x0000000002F2EFD0>

>>> it = iter(range(10))
>>> next(it)
0
>>> next(it)
1

演示斐波那契数列

可以设置终止迭代条件,如下

if 条件:
    raise StopIteration
>>> class Fibs:
    def __init__(self,n = 10):
        self.a = 0
        self.b = 1
        self.n = n
    def __iter__(self):
        return self
    def __next__(self):
        self.a, self.b = self.b, self.a + self.b
        if self.a > self.n :
            raise StopIteration
        return self.a

>>> f = Fibs()
>>> for i in f:
    print(i)

1
1
2
3
5
8
>>> 

这里写图片描述

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

改写代码:

import time as t
class LeapYear:
        #从begin到现在为止的所有闰年
        def __init__(self,begin = 1980 ):
                self.now = t.localtime()[0]
                self.begin = begin

        def isLeapYear(self,year):
                if year%4 == 0 and year%100 != 0 or year%400 == 0 :
                        return True
                else:
                        return False       

        def __iter__(self):
                return self
        def __next__(self):

                while not self.isLeapYear(self.now):#找第一个闰年 
                        self.now -= 1

                temp = self.now#保存第一个闰年
                self.now -= 1 #为下次迭代作准备
                if self.now < self.begin:
                        raise StopIteration
                return temp


"""
>>> leapyear = LeapYear(1900)
>>> years = LeapYear(1900)
>>> cnt = 0
>>> for y in years:
    cnt += 1
    s = "\n"
    if cnt%10:
        s = " "
    print(y,end = s)

这里写图片描述

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值