什么是迭代器

  • 可迭代对象:

    可以通过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. kettle从入门到精通 第六十九课 ETL之kettle kettle cdc mysql,轻松实现实时增量同步

    1.之前kettle cdc mysql的时候使用的方案是canal+kafka+kettle,今天我们一起学习下使用kettle的插件Debezium直接cdc mysql. 注:CDC (Chan ...

  2. 3.8折年终钜惠,RK3568J国产工业评估板

    3.8折年终钜惠,RK3568J国产工业评估板活动火热进行中,错过等一年! -核心板国产化率100%,提供报告-瑞芯微四核ARM Cortex-A55@1.8GHz-4K视频解码.1080P视频编码. ...

  3. UF_MB_ask_button_id 测试

    # tesy UF_MB_ask_button_id import NXOpen import NXOpen_UF as nuf def main(): ses = NXOpen.Session.Ge ...

  4. Webpack5

    Webpack是一款模块打包工具,可以把多个文件打包成一个或几个文件,它不仅能打包JS文件, 还能打包css, image等静态资源.当然,在默认情况下,它只打包JS文件和JSON文件,因为它只认识J ...

  5. Spring定时任务和@Async注解异步调用

    Spring定时任务 1.@Scheduled注解方式 使用方式 @Scheduled的使用方式十分简单,首先在项目启动类添加注解@EnableScheduled. 编写定时任务方法,方法上添加注解@ ...

  6. Intellij IDEA 'Error:java: 无效的源发行版:13'

    第一步,依次点击,File - Settings - Bulid, Execution,Deployment - Compiler - Java Compiler,修改版本为13(你使用的java是哪 ...

  7. Mybatis 快速入门(注解方式)

    导读 注解开发的方式只需要程序员开发Mapper接口即可,不需要编写映射文件(XML). 环境搭建 项目结构 SqlMapConfig.xml <!DOCTYPE configuration P ...

  8. 1. CMake 概述

    1. CMake 概述 CMake 可以用来构建C/C++工程,可以跨平台.允许开发者指定整个工程的编译流程 在CMake 没有出来之前,开发者需要手写 makefile,但是不同平台下的 makef ...

  9. [oeasy]python0015_键盘改造_将esc和capslock对调_hjkl_移动_双手正位

    键盘改造 回忆上次内容 上次练习了复制粘贴 按键 作用 <kbd>y</kbd><kbd>y</kbd> 复制光标行代码 到剪贴板 <kbd> ...

  10. Windows cifs共享给linux

    Windows 搜索启用或关闭Windows功能 启用cifs 共享文件并添加普通用户 解禁guest用户和设置本地策略 右键计算机 win+r输入secpol.msc 将guest删除 修改网络访问 ...