首页 > 编程语言 >Python实现迭代器(__next__和__iter__)

Python实现迭代器(__next__和__iter__)

时间:2023-03-03 16:24:27浏览次数:39  
标签:__ return Python self stop iter ._ def

一、简单示例

死循环

class Foo:
    def __init__(self, x):
        self.x = x

    def __iter__(self):
        return self

    def __next__(self):
        self.x += 1
        return self.x


f = Foo(3)
for i in f:
    print(i)

二、StopIteration异常版

加上StopIteration异常

class Foo:
    def __init__(self, start, stop):
        self.num = start
        self.stop = stop

    def __iter__(self):
        return self

    def __next__(self):
        if self.num >= self.stop:
            raise StopIteration
        n = self.num
        self.num += 1
        return n


f = Foo(1, 5)
from collections import Iterable, Iterator
print(isinstance(f, Iterator))
#输出
True
for i in Foo(1, 5):
    print(i)

#输出
1
2
3
4

三、模拟range

class Range:
    def __init__(self, n, stop, step):
        self.n = n
        self.stop = stop
        self.step = step

    def __next__(self):
        if self.n >= self.stop:
            raise StopIteration
        x = self.n
        self.n += self.step
        return x

    def __iter__(self):
        return self


for i in Range(1, 7, 3):
    print(i)
#输出
1
4

四、斐波那契数列

class Fib:
    def __init__(self):
        self._a = 0
        self._b = 1

    def __iter__(self):
        return self

    def __next__(self):
        self._a, self._b = self._b, self._a + self._b
        return self._a

#学习中遇到问题没人解答?小编创建了一个Python学习交流群:711312441
f1 = Fib()
for i in f1:
    if i > 100:
        break
    print('%s ' % i, end='')
#输出
1 1 2 3 5 8 13 21 34 55 89    

标签:__,return,Python,self,stop,iter,._,def
From: https://www.cnblogs.com/djdjdj123/p/17176085.html

相关文章

  • pod调度器
    Pod是Kubernetes集群中能够被创建和管理的最小部署单元。所以需要有工具去操作和管理它们的生命周期,这里就需要用到控制器了。Pod控制器由master的kube-controlle......
  • 用PWA提升Web应用的性能和用户体验
       PWA是一种Web应用的新范式,它将Web应用和原生应用的体验结合在一起。PWA可以让Web应用离线缓存、全屏模式、桌面快捷方式等,提供与原生应用类似的用户体验......
  • QMap
    QMap #include<QMap> PublicFunctions QMap() QMap(std::initializer_list<std::pair<Key,T>> list) QMap(constQMap<Key,T>&other) ......
  • vue样式穿透 滚动条隐藏 原生样式修改
    样式穿透:deep,否则可能不能覆盖原有样式,vue2使用/v-deep/或者::v-deep,或者取消scoped,但不推荐,因为会影响到其他页面样式<stylelang="scss"scoped>/deep/ .el-table__b......
  • 如何查看wix安装包日志
    提问如何查看wix安装包日志回答xxx.msi-l"debug.txt"参考https://blog.walterlv.com/post/how-to-view-wix-burn-installer-logs.html......
  • 如何让错误处理更加优雅
    1.go采用c的err方法,但是容易产生大量的外部判断。packagekillerimport"fmt"typeBookstruct{NamestringPriceintStoreintMember......
  • Windows 10 域环境下黑屏问题处理
    1.打开注册表,定位到HKEY_CURRENT_USER\ControlPanel\Desktop,找到WallPaper,将其值设置为共享图片的UNC路径。2.再将C盘用户账号文件夹AppData\Roaming\Microsoft\Wind......
  • 配置 Docker 使用 GPU
    准备工作首先你需要准备一台拥有GPU的实例,在这里我将使用阿里云的竞价实例来做演示,因为它对于短期使用GPU更加划算。注意,本篇文章将教你手动进行GPU驱动的配置,所以在购......
  • 网络通信——TCP “三次握手“、“四次挥手“ 详解
    前言TCP三次握手和四次挥手是面试题的热门考点,它们分别对应TCP的连接和释放过程1.TCP通信包含那几步?TCP通信过程包括三个步骤:建立TCP连接通道,传输数据,断开TCP连接通道......
  • 2023-03-03 js map 双重嵌套
    恩。。其实也没啥要记录的,记住关键一点就是必须要有return,不管是几重,比如:arr.map((item,index)=>{  return(    item.arr2.map((item2,index2)=>{......