用python函数写斐波那契数列的函数_python—函数进阶-斐波那契数列

2023-11-09

上次说到生成器的调用next(),这样很不方便,需要手动调,我们一般是循环着调,while ,for都可以

a = (i for i in range(5))

for i in a:

print(i)

0

1

2

3

4 # 执行结果

#和手动调的区别是没了的话就会自动终止循环。就跳出来了

#换成while

a = (i for i in range(5))

while True:

next(a)

0

1

2

3

4

Traceback (most recent call last):

File "", line 2, in

StopIteration # 执行结果,会报错

#所以一般会用for循环,相当于错误内部就给消化了

补充:其实range(10)底层就是用生成器实现的,也就是每循环一次加一,再python3.x里,range(10)的执行结果是range(0,10),而在python2.7里,结果是直接生成了一个列表[0,1,2,3,4,5,6,7,8,9],这是因为python3中他不是一个普通的range(),是一个公式,就根本没有创建,只有循环到了才创建这个值,但是再python2 里有和python3里range()方法相同的是xrange()。

前面所讲的加1是最简单的,生成器是可以做复杂的算法的。再列表生成式里最复杂的最多写三元运算,而要是做更复杂的,就需要用函数来做这个生成器。

比如,数学上著名的斐波那契数列,(除了第一个和第二个数之外,任意两个数都可由前两个数相加得到)1,1,2,3,5,8,13,21,34......(没什么用,就是一个规律)

如果把前15个数相加,斐波那契数列用列表生成式写不出来,但是可以用函数把他轻松的打印出来

def fib(max):

n, a, b = 0, 0, 1

while n< max:

print(b)

a, b = b, a+b

n = n+1

return 'done'

注意赋值语句:a, b = b, a+b

试一下:

fib(15)

1

1

2

3

5

8

13

21

34

55

89

144

233

377

610

'done' # 执行结果

把他变成生成器只需要一步

def fib(max):

n, a, b = 0, 0, 1

while n< max:

yield b

a, b = b, a+b

n = n+1

return 'done'

print(fib(15))

#执行结果

#接下来调用

def fib(max):

n, a, b = 0, 0, 1

while n< max:

yield b #只要函数中出现了yield,就变成了一个生成器,它的作用就是把函数的执行过程冻结在这一步,并且把 b 的值返回给next

a, b = b, a+b

n = n+1

return 'done'

f = fib(15)

print(next(f))

print(next(f))

print(next(f))

print(next(f))

1

1

2

3 # 执行结果

# 换成循环的方式调用

def fib(max):

n, a, b = 0, 0, 1

while n< max:

yield b

a, b = b, a+b

n = n+1

return 'done'

f = fib(15)

for i in f:

print(i)

1

1

2

3

5

8

13

21

34

55

89

144

233

377

610 # 执行结果

#分析

def fib(max):

n, a, b = 0, 0, 1

while n< max:

print('yemao')

yield b #函数到这儿并没有返回就结束了,而是冻结了,接下来怎么继续往下走呢

print(b)

a, b = b, a+b

n = n+1

return 'done'

f = fib(15)

print(f) 并不会有执行结果,不会调用,只是生成了一个生成器

next(f)# 调用next才会被执行

#yield比之前的函数好的地方其实是,函数一执行,就会再函数里面打印等结果,不能往外返回,

#而用yield就可以在执行的过程中把想要的值返回出来,

#yield以后, 函数外面加()根本不会调用,而是生成了一个生成器

#如果要中途终止这个生成器

def range2(n):

count = 0

while count < n:

print('count', count)

count += 1

sign = yield count #return

if sign == 'stop':

print('---sign', sign)

break

return 3333

new_range = range2(3)

n1 = next(new_range)

new_range.send('stop')

#next只能是唤醒生成器并执行

#send可以是唤醒并执行,还可以发送给一个信息到生成器内部

count 0

Traceback (most recent call last):

---sign stop

File "E:/pycharm/pyCharm/考核/lianxi.py", line 16, in

new_range.send('stop')

StopIteration: 3333 # 执行结果

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用python函数写斐波那契数列的函数_python—函数进阶-斐波那契数列 的相关文章

  • 卷积核的类型及其作用

    目录 一 堆叠小卷积核 1 为什么要用大卷积核代替小卷积核 2 为什么堆叠小卷积核参数量要比大卷积核少 3 输入输出图片通道数一致时堆叠小卷积核参数量才更小 4 感受野计算 二 空洞卷积 能否让固定大小的卷积核看到更大范围的区域 三 非对称
  • c语言中的std模版用法,C++模板template用法小结(推荐)

    引言 模板 Template 指C 程序设计设计语言中采用类型作为参数的程序设计 支持通用程序设计 C 的标准库提供许多有用的函数大多结合了模板的观念 如STL以及IO Stream 函数模板 在c 入门中 很多人会接触swap int i
  • vue的安全隐患(一)

    vue安全方面的知识 第一原则永远不要使用不信任的模板 在vue中使用不信任的模板这等于允许在应用程序中执行任意的javascript代码 甚至更糟糕的是服务器可能会被攻破 比如在 template sertppp 不要这样做因为vue的模
  • 强化学习的几种环境介绍

    前言 对于强化学习相关的几种环境介绍 主要包括Mini world Gym maze Grid world gym minigrid Mini world https github com maximecb gym miniworld Mi
  • 用c语言设计加减乘除自动出题程序,用C语言编写一个简易计算器可实现加减乘除,连加连减,连乖连除....

    include include stdlib h define N 10 void fun int a b t char c scanf d a scanf c c scanf d b if c c c c c if c t a b if
  • 关于unique case和priority case语法

    SystemVerilog对于case casez casex语句新增了两个特殊的修饰符 unique及priority 其语法规则如下 unique case
  • 疫情信息获取。

    爬取目标 腾讯新闻 疫情数据 确定信息 在目标网页按F12 在全局数据中寻找 发现有目标数据 接下来在Network中寻找数据并在Headers中获得链接地址 也可以点击搜索查找 较为方便 省份数据和全球数据也是同样的方法 注意图二 最终确
  • 【JS逆向】之webpack逆向实战

    声明 本文只作学习研究 禁止用于非法用途 否则后果自负 如有侵权 请告知删除 谢谢 目标网站 aHR0cHM6Ly8xNTE0NjQ2LmNvbS9sb2dpbg 引言 webpack对于有研究过人的来说就是 难度并不是很高 但是因为web
  • xss过滤绕过方法总结

    xss注入常用语句 1 2 img src 3 img src 4
  • JS 将数组写入表单

    将数据写入表单 var rowData 1 2 3 function insertToForm rowData if rowData length lt 1 alert 没有数据 else var form formID for var i
  • C++中的类模板定义及实例化

    转载自Out man 文章目录 一 类模板定义及实例化 定义一个类模板 类模板实例化 二 类模板的成员函数 一 类模板定义及实例化 定义一个类模板 template
  • 关于C/C++运算符优先级问题探讨

    最近在知乎上看到一个c c 运算符连写的问题 引发了诸多网友的讨论 具体内容如下图 乍一看 这句代码很长 确实有些让人糊涂 尤其是学习过python的同学 对此写法不太理解 今天我们一起来说一说 优先级 在c语言的表达式中 如果存在多个运算
  • 第1章-爬虫简介(http请求)

    第1章 爬虫简介 一 通讯协议 二 网络模型 三 Http请求与响应 3 1 Http通信 3 2 Http请求 3 3 Http请求方法 四 几个概念 4 1 GET和POST 4 2 URL组成部分 4 3 User Agent 户代理
  • 基于Linux环境的PPPOE服务器搭建

    转载 https www imooc com article 50559 VMware ubuntu虚拟机上搭建PPPOE服务器 https blog csdn net rheostat article details 8069778
  • 随手记怎么样靠谱吗?随手记平台不触碰用户资金

    随着经济的快速发展和人们理财意识的增强 互联网理财在人们的日常生活中逐步普及 而随手记作为随手集团旗下集手机记账 财务规划 金融服务 社区投资者教育等功能于一体的个人财务管理和金融服务品牌 其推出的理财产品受到不少理财投资者的青睐 但是 随
  • 什么是渲染目标(render target)&& 渲染到纹理(Render To Texture, RTT)详解

    渲染到纹理 Render To Texture RTT 详解 RTT是现在很多特效里面都会用到的一项很基本的技术 实现起来很简单 也很重要 但是让人不解的是网上搜索了半天只找到很少的文章说这个事儿 不知道是因为太简单还是因为这项技术已经出现
  • docker安装觅思文档(mrdoc)

    mrdoc文档地址 https mrdoc fun doc 18 mrdoc项目地址 GitHub zmister2016 MrDoc mrdoc online document system developed based on pyth
  • STM32逆变器控制

    ADC引脚分配 直流电压 Vc1 PA0 Vc2 PA1 电网电压 U1 V1 W1 AD7323 PB3 PB4 PB5 逆变器输出电压 UCA UCB UCC AD7323 PB13 PB14 PB15 电容电流采样 ICa ICb I
  • Mybatis解释及Mybatis项目搭建

    一 什么是Mybatis MyBatis是一个持久层框架 属于JDBC的替代方案之一 他的前身是iBatis 它属于ORM关系型映射 ORM O R Mapping 对象关系映射 是一种把内存中的对象保存到关系型数据库的技术 用它封装数据库

随机推荐

  • jmeter报错:jmeter java.net.SocketException: Connection reset

    jmeter java net SocketException Connection reset 网络慢 导致
  • HBuilder mui登录和访问控制教程

    HBuilder mui登录和访问控制教程 mui中提供了登录的模板页 但是对于登录后各个页面的访问控制 刷新等并没有官方的推荐方案 我在这里简单说一种初级的解决方案吧 肯定有不足指出 欢迎批评指正 第一节中创建移动APP项目的时候选择的是
  • micropython 通过spi驱动LCD显示屏

    我呢一直对电路设计和程序设计有非常大的爱好 不好说有多精通 纯属个人弄着玩的 所以后面有时间可以和大家一起来交流一下 另外最近也接触了一些PCB 所以一些开发板之类的都自己设计制作了 今天讲的是通过micropython来驱动LCD显示 用
  • 解决数据库死锁现象

    解决数据库死锁现象 一 日志情况 日志情况如下 信息 At least one JAR was scanned for TLDs yet contained no TLDs Enable debug logging for this log
  • JS函数 ,变量

    6函数 6 1函数的概念 大事化小 将复杂的问题简单化 如何大事化小呢 通过函数 为什么需要有函数 首先看一下输出100以内所有素数的解决方案 方案一 循环嵌套 var n Number prompt 请输入一个自然数 var m Math
  • Microsoft Office 2016(ProPlus/Visio/Project) VOL 简体中文版

    Office 2016 专业增强版32 位 文件名 SW DVD5 Office Professional Plus 2016 W32 ChnSimp MLF X20 41351 ISO SHA1 0218F50774AAB63AF7755
  • node中Express的use深入理解

    Express的API 现在学node 不来点Express 都不好意思给人打招呼 但是 我刚接触的时候 觉得好多API 感觉乱糟糟的 没办法 大脑容量不够 不过有一样东西叫地铁 在上面可以让人想清楚很多事情 先来一段最简单的node版he
  • 理解TCP序列号(Sequence Number)和确认号(Acknowledgment Number)

    原文见 Understanding TCP Sequence and Acknowledgment Numbers PacketLife net 如果你正在读这篇文章 很可能你对TCP 非著名 的 三次握手 或者说 SYN SYN ACK
  • 系列:4.4、Kubernetes 存储

    Kubernetes 存储 Kubernetes storage存储的相关选项 1 Kubernetes Volumes 由于 Pod 是短暂的 我们有时要求 Pod 上的数据可用于下一个计划的 Pod 或者 有时容器应该在 Pod 中共享
  • 为什么c++输出char类型变量的地址出现的是乱码?

    char a h cout lt lt a 就会出现乱码 h烫烫烫烫篾 看了这个贴 https bbs csdn net topics 310062432 改成printf p a 或者std cout lt lt void a 就可以输出
  • Frida—HOOK 学习笔记2

    Android部分 基础知识 1 安卓分层 简单提一下安卓分层 这个点知道了更好 不知道也无所谓 毕竟我们不是开发 只是为了避免下述情况 我要学习so文件HOOK 一波百度 HOOK so层 之后 出现了一个 native 点进去一看 其内
  • Redis学习笔记(七):底层数据结构和对象

    第一章 数据结构与对象 一 简单动态字符串 SDS 在Redis中默认字符串的表示使用了简单动态字符串 Simple Dynamic String 而没有使用C语言中的传统字符串 字面量 string literal 字面量只用来表示一些无
  • 【RabbitMQ教程】- 实现延时队列

    目录 RabbitMQ实现延时队列 Maven依赖 代码实现 1 插件方式 RabbitMQ实现延时队列 RabbitMQ实现延时队列有两种方式 1 死信队列 2 下载插件 Maven依赖 Maven依赖
  • 力扣(LeetCode)每日一题 1921. 消灭怪物的最大数量

    只需要三个步骤 1 初始化 2 排序 3 遍历 class Solution public int eliminateMaximum int dist int speed 初始化 每个怪物到达城市所需要的回合数目 int times new
  • QEMU-运行一个字符驱动(3)

    上面是我的微信和QQ群 欢迎新朋友的加入 上代码 chardriver c include
  • Web 组件代码示例

    在本文中 我提供了对 Web 组件是什么以及如何使用它们的基本理解 使用现实生活中的示例 我将展示 Web 组件如何帮助使应用程序更可预测和更易于维护 此外 我分享了有关如何通过将 HTML CSS JS 代码隔离为 等待它 隔离的组件以供
  • 二叉查找树 数组实现 ArrayBinarySearchTree

    数组实现的二叉查找树 适用查找操作频繁 插入 删除操作较少的情况 代码 using System namespace DataStructure 数组实现的二叉查找树 输入一个数组 获得一颗二叉查找树 找parent 和 child ind
  • 华为OD机试 - 文件目录大小(Java & JS & Python)

    题目描述 一个文件目录的数据格式为 目录id 本目录中文件大小 子目录id列表 其中目录id全局唯一 取值范围 1 200 本目录中文件大小范围 1 1000 子目录id列表个数 0 10 例如 1 20 2 3 表示目录1中文件总大小是2
  • c++ 实现信号和槽机制

    主要通过 c 实现类型QT 信号和槽的问题 设计思路 1 利于模板函数和模板类的 通用性 2 BInd的时候 讲槽函数指针保存 触发时调用 代码如下 include
  • 用python函数写斐波那契数列的函数_python—函数进阶-斐波那契数列

    上次说到生成器的调用next 这样很不方便 需要手动调 我们一般是循环着调 while for都可以 a i for i in range 5 for i in a print i 0 1 2 3 4 执行结果 和手动调的区别是没了的话就会