生成器:只有在调用的时候才会生成相应的数据(调用到这个数据的时候才会生成这个数据,没有调用到时就没有这个数据)
只记录数据的当前位置 生成器不能像普通的列表一样,通过下标或者切片的方式去取
生成器只能通过 循环 或者__next__()(2.x中用next())方法去取。
""" # 创建生成器 """
# 方法一:
generator1 = ( i*i for i in range(10) )
for i in generator1:
print(i)
""" # 生成一个列表,保存一个计算20次的斐波那契数列:
# 斐波那契数列:除第一个和第二个数外,任意一个数都可由前两个数相加得到。 """
# 普通的方法,用一个函数实现:
def fib(max):
n, a, b = 0, 0, 1
while n < max:
print(b)
a, b = b, a + b # 注意,赋值语句a, b = b, a + b
# 相当于:
# t = (b, a + b) #t是一个tuple(元组)
# a = t[0]
# b = t[1]
n += 1
return 'done'
fib(20)
""" # 方法二:
# 使用生成器,来生成一个斐波那契数列:
def fib(max):
n, a, b = 0, 0, 1
while n < max:
yield b # 注意这里的区别
a, b = b, a + b # 注意,赋值语句a, b = b, a + b
# 相当于:
# t = (b, a + b) #t是一个tuple(元组)
# a = t[0]
# b = t[1]
n += 1
# 这个函数因为使用了yield,它便不能再称之为函数,而应该称之为生成器
# 而这里的return的返回值,值返回给一个异常状态下的值
# 比如这里当所有数据都生成完成后,没有数据了,会返回这么一个异常:StopIteration: done,这个done是可以自定义的,就是通过下面的这个return
return 'done'
fib_generator = fib(20)
print(fib_generator)
print(fib_generator.__next__())
print(fib_generator.__next__())
print(fib_generator.__next__())
print(fib_generator.__next__())
print(fib_generator.__next__())
print(fib_generator.__next__())
print(fib_generator.__next__())
print('start fib_generator:')
#for i in fib_generator: # 注意:前面因为已经使用next方法,取过几个数据了,所以这里直接从最后一次取值的地方开始循环
# print(i)
while True:
try:
fib_value = fib_generator.__next__()
print("fib_value: %s" % fib_value)
except StopIteration as fibs:
print("Generator return value: %s " % fibs.value)
break

pythoy-生成器的更多相关文章

  1. 介绍一款原创的四则运算算式生成器:CalculateIt2

    家里小朋友读一年级了,最近每天都有一些10以内的加减法口算练习,作为程序员爸爸,自然也是想办法能够偷懒,让电脑出题,给小朋友做些练习.于是,自己在业余时间开发了一个四则运算算式生成器,名为:Calcu ...

  2. 每天一个设计模式-7 生成器模式(Builder)

    每天一个设计模式-7 生成器模式(Builder) 一.实际问题 在讨论工厂方法模式的时候,提到了一个导出数据的应用框架,但是并没有涉及到导出数据的具体实现,这次通过生成器模式来简单实现导出成文本,X ...

  3. Objective-C 生成器模式 -- 简单实用和说明

    1.生成器模式的定义 将一个复杂的对象的构件与它的表示分离,使得同样的构建过程可以创建不同的表示 2.生成器模式的UML Builder :生成器接口,定义创建一个Product各个部件的操作 Con ...

  4. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(25)-权限管理系统-系统管理员(附生成器)

    系列目录 这一节我们要着手建立系统管理员表,但发布之前,我先发布一个代码生成器给大家先用着. 这个生成器是为这个项目而生的,理论不能用于其他项目,而且写得比较潦草,但能用 下载地址 有兴趣要生成器源码 ...

  5. Python(四)装饰器、迭代器&生成器、re正则表达式、字符串格式化

    本章内容: 装饰器 迭代器 & 生成器 re 正则表达式 字符串格式化 装饰器 装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志.性能测试.事务处理等.装饰器是解 ...

  6. ES6笔记(5)-- Generator生成器函数

    系列文章 -- ES6笔记系列 接触过Ajax请求的会遇到过异步调用的问题,为了保证调用顺序的正确性,一般我们会在回调函数中调用,也有用到一些新的解决方案如Promise相关的技术. 在异步编程中,还 ...

  7. C#/ASP.NET完善的DBHelper,配套Model生成器

    支持Oracle.MSSQL.MySQL.SQLite四种数据库,支持事务,支持对象关系映射:已在多个项目中实际使用. 没有语法糖,学习成本几乎为0,拿来即用. DBHelper类完整代码: usin ...

  8. Python 生成器与迭代器 yield 案例分析

    前几天刚开始看 Python ,后因为项目突然到来,导致Python的学习搁置了几天.然后今天看回Python 发现 Yield 这个忽然想不起是干嘛用的了(所以,好记性不如烂笔头.).然后只能 花点 ...

  9. Mockjs,模拟数据生成器

    (推荐使用)Mock.js是一款模拟数据生成器,旨在帮助前端攻城师独立于后端进行开发,帮助编写单元测试. 提供了以下模拟功能: 1. 根据数据模板生成模拟数据. 2. 模拟Ajax请求,生成并返回模拟 ...

  10. GUID生成器

    这个GUID生成器是一个小巧的软件,属于笔者在空余时间开发的. http://pan.baidu.com/s/1sk6VGpn

随机推荐

  1. laravel上传文件FTP驱动配置

    FTP驱动配置 Laravel 的文件系统集成了 FTP 操作,不过,框架默认的配置文件 filesystems.php 并没有提供示例配置.如果你需要配置一个FTP文件系统,可以使用以下示例配置: ...

  2. Win系列:VC++编写自定义组件

    在Visual Studio 中新建一个Visual C++的 Windows应用商店的Windows运行时组件项目,并将项目命名为FilePickerComponent.然后在项目的解决方案资源管理 ...

  3. 中国队再创佳绩,IOI2018喜获四金

    第30届国际信息学奥林匹克竞赛(IOI2018)于9月1日-8日在日本筑波举行,共有来自87个国家(地区)的335名选手参赛.    中国代表队四名选手经过努力拼搏,获得金牌.其中,杨懋龙(湖南长沙市 ...

  4. TiDB 深度实践之旅--真实“踩坑”经历

    美团点评 TiDB 深度实践之旅(9000 字长文 / 真实“踩坑”经历) 4   PingCAP · 154 天前 · 3956 次点击 这是一个创建于 154 天前的主题,其中的信息可能已经有所发 ...

  5. 【转】Java中static关键字用法总结

    1.     静态方法 通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法 声明为static的方法有以下几条限制: · 它们仅能调用其他的static 方法. · 它 ...

  6. Web API之路由浅谈

    Web API的路由,是指明接口地址的方向,是照亮获取数据路上的灯塔,其重要性不言而喻. 本篇文章以vs2015为例,一步步说明路由的创建及使用,其中包括默认路由.自定义路由和特性路由. 一.默认路由 ...

  7. 四:(之四)基于已有镜像构建自己的Docker镜像

    4构建自己的Docker镜像 4.1常用命令: 等同于docker commit 将一个被改变的容器创建成一个新的image 等同于docker build 通过Dockerfile创建一个image ...

  8. 强化学习10-Deep Q Learning-fix target

    针对 Deep Q Learning 可能无法收敛的问题,这里提出了一种  fix target 的方法,就是冻结现实神经网络,延时更新参数. 这个方法的初衷是这样的: 1. 之前我们每个(批)记忆都 ...

  9. webstorm安装流程

    第一步:双击安装目录 修改安装目录 尽量不要放在C盘 第二步: 把汉化包 直接复制文件到WebStorm安装目录中lib文件夹中即可,重新打开WebStorm就可以了

  10. audit:backlog limit exceeded

    今天发现存储服务器业务不可用,服务器能ping通,远程不了!  到机房管理员那里查看服务器状态后,发现显示如下: 显然系统已经崩溃,只能先重启服务器,先恢复业务,然后针对backlog limit e ...