什么是迭代器

  • 可迭代对象:

    可以通过for循环来实现遍历,例如list、string、dict
  • 迭代器:

    不仅可以使用for循环,还可以使用next()方法、__iter__()

    • next():获取容器中的下一个元素,当容器中没有可访问的元素后,next()方法将会抛出一个StopIteration异常终止迭代器
    • iter():

      内建函数获取迭代器对象

如何判断是迭代器

使用isinstance()函数来判断一个对象是否是一个已知的类型

from collections import Iterable, Iterator
# isinstance(对象, Iterable) 是否是可迭代的
# isinstance(对象, Iterator) 是否是迭代器
mylist = [1, 2, 3]
print(isinstance(mylist, Iterable))
print(isinstance(mylist, Iterator))

什么是生成器

  • 特殊的迭代器,通过函数来创建
  • 使用yeild来一次返回一个结果,而不是return
    • 生成器在执行到yeild语句时,会暂停生成器函数执行,并在下次执行时继续从上次暂停的位置开始

如何判断是否是生成器

同上通过isinstance()函数

斐波那契数列的各种实现方法

for循环实现法

n = int(input())
if n < 2:
print(n)
else:
dp = [-1] * (n + 1)
dp[0] = 0
dp[1] = 1
for i in range(2, n + 1):
dp[i] = dp[i - 1] + dp[i - 2]
print(dp[n])

递归实现法

def fib(n):
if n < 2:
return n
else:
return fib(n - 1) + fib(n -2)
s = int(input())
print(fib(s))

迭代器实现法

class FibonacciIterator:
def __init__(self):
self.first = 1
self.second = 1 def method(self):
pass def __iter__(self):
return self def __next__(self):
result = self.first + self.second
self.first = self.second
self.second = result
return self.first if __name__ == '__main__':
fibo = FibonacciIterator()
for i in range(int(input()) - 1):
print(next(fibo))

python学习之---迭代器与生成器的更多相关文章

  1. Python学习之迭代器和生成器

    那么首先什么是迭代器和生成器呢? 迭代器即迭代的工具,那么什么又是迭代呢?所谓迭代:迭代是一个重复的过程,每次重读即一次迭代,并且每次迭代的结果都是下一次迭代的初始值.例: l=[1,2,3] cou ...

  2. python学习-38迭代器和生成器

    迭代器和生成器 ---- 迭代器协议和for循环工作机制 1.迭代器协议:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么引起一个Stoplteration异常,以终止迭代(只能往 ...

  3. Python学习--07迭代器、生成器

    迭代 如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration). Python里使用for...in来迭代. 常用可迭代对象有 ...

  4. python学习日记(迭代器、生成器)-乱七八糟

    迭代器 迭代是Python最强大的功能之一,是访问集合元素的一种方式. 迭代器是一个可以记住遍历的位置的对象. 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退 ...

  5. python学习 day13 迭代器,生成器,枚举对象

    一.复习 1.闭包:定义在函数内部的函数(被函数嵌套的函数) 2.装饰器:闭包的一个应用场景 -- 为一个函数添加新功能的工具 3.开放封闭原则:不能修改源代码,不能修改调用方式,但可以对外提供增加新 ...

  6. python 学习分享-迭代器与生成器篇

    迭代器 迭代是Python最强大的功能之一,是访问集合元素的一种方式.. 迭代器是一个可以记住遍历的位置的对象. 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后 ...

  7. Python学习之--迭代器、生成器

    迭代器 迭代器是访问集合元素的一种方式.从对象第一个元素开始访问,直到所有的元素被访问结束.迭代器只能往前,不能往后退.迭代器与普通Python对象的区别是迭代器有一个__next__()方法,每次调 ...

  8. python学习之迭代器与生成器

    1.迭代器省内存 迭代器只允许往后读数据,不允许回读数据 迭代器不能跳着读文件,因为他是一点一点加载文件内容到内存的,读完了可以销毁或丢掉 2.生成一个迭代器 a = iter(["fd&q ...

  9. Python学习笔记——迭代器和生成器

    1.手动遍历迭代器 使用next函数,并捕获StopIteration异常. def manual_iter(): with open('./test.py') as f: try: while Tr ...

  10. python学习10—迭代器、三元表达式与生成器

    python学习10—迭代器.三元表达式与生成器 1. 迭代器协议 定义:对象必须提供一个next方法,执行该方法或者返回迭代中的下一项,或者返回一个StopIteration异常,以终止迭代(只能往 ...

随机推荐

  1. 以 ZGC 为例,谈一谈 JVM 是如何实现 Reference 语义的

    本文基于 OpenJDK17 进行讨论 1. Reference 相关概念及其应用场景总览 Reference(引用)是 JVM 中非常核心且重要的一个概念,垃圾回收器判断一个对象存活与否都是围绕着这 ...

  2. 解决TypeError: 'NoneType' object is not subscriptable

    1.捕获异常的方式try: img_list = img_list["name"]except: img_list = "" 2.对象进行判断if img_li ...

  3. AnnotationTransactionAttributeSource is only available on Java 1.5 and higher和windows同时安装jdk7和jdk8

    AnnotationTransactionAttributeSource is only available on Java 1.5 and higher和windows同时安装jdk7和jdk8 出 ...

  4. 中国电信登录RSA算法+分析图文

    Tips:当你看到这个提示的时候,说明当前的文章是由原emlog博客系统搬迁至此的,文章发布时间已过于久远,编排和内容不一定完整,还请谅解` 中国电信登录RSA算法+分析图文 日期:2016-9-30 ...

  5. Prometheus监控系统(三)Prometheus与Grafana集成

    1. Prometheus和Grafana集成 Grafana是一款采用Go语言编写的开源应用,主要用于大规模指标数据的可视化展现,是网络架构和应用分析中最流行的时序数据展示工具.目前已支持绝大部分常 ...

  6. USB OTG有关协议

    想了解USB OTG的工作原理,需要知道三个协议: ADP:Attach Detection Protocol HNP:Host Negotiation Protocol SRP:Session Re ...

  7. 在centos开启防火墙没启动22/tcp or 22/udp的情况下是如何ssh连上的

    偶尔间查询防火墙的22/tcp or 22/udp ,看到是no的状态,而且此时也是ssh登陆的,然后就反复尝试,关闭22端口,开启,重载,重启.甚至连上另个服务器发现还是一样的情况.在群里问大佬们终 ...

  8. 【Python】基于动态规划和K聚类的彩色图片压缩算法

    引言 当想要压缩一张彩色图像时,彩色图像通常由数百万个颜色值组成,每个颜色值都由红.绿.蓝三个分量组成.因此,如果我们直接对图像的每个像素进行编码,会导致非常大的数据量.为了减少数据量,我们可以尝试减 ...

  9. 洛谷P2430

    还是很容易能看出来是01背包 #include<iostream> #include<utility> using namespace std; typedef long lo ...

  10. WSL2连接USB设备(以USRP B210为例)

    使用WSL2时,发现其无法直接识别到宿主机上插入的USB设备. 可利用USPIPD-WIN项目进行连接. 以下以USRP B210设备连接为例,展示连接过程: 安装USBIPD-WIN 项目 参考连接 ...