Python学习笔记__3.4章 生成器
# 这是学习廖雪峰老师python教程的学习笔记
1、概览
列表元素按照某种算法推算出来,在循环的过程中不断推算出后续的元素。这种一边循环一边计算的机制,称为生成器:generator
1.1、创建 generator
1)方法一
只要把一个列表生成式的[]改成(),就创建了一个generator
L = [x * x for x in range(10)] # 这是列表生成式
g = (x * x for x in range(10)) # 这是generator
>>> g
<generator object <genexpr> at 0x1022ef630>
generator的值不能直接打印,需要用 next()函数获得,或者通过for循环打印
next(g)
每调用一次,返回一个generator的值,当所有值返回完毕后,再调用会报错StopIteration
for 循环
>>> for n in g:
... print(n)
2)方法二
在函数体中,有 yield。当然,generator的函数,也可以用 next() 或者 for 循环获取返回值
函数是顺序执行,遇到return语句或者最后一行函数语句就返回
generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行
def odd():
print('step 1')
yield 1
print('step 2')
yield(3)
print('step 3')
yield(5)
>>> o = odd()
>>> next(o) # next(odd()) 调用效果一样。for循环调用见例题
step 1
1
>>> next(o)
step 2
3
>>> next(o)
step 3
5
2、例题
1、编写一个生成斐波那契数列的 generator 函数
# 函数编写
def fib(max):
n, a, b = 0, 0, 1
while n < max:
yield b
a, b = b, a + b
n = n + 1
return 'done'
# for循环获取返回值,但获取不到generator 执行完的报错返回
f=fib(6) # 定义一个generator对象 f
for n in f:
print(n)
# 获取值得同时,获取generator的报错返回
g=fib(6)
while True:
try:
x=next(g)
print('g',x)
except StopIteration as e: # 捕捉错误
print('Generator return value:',e.value) # 输入错误的返回值
break
2、编写一个杨辉三角的generator函数
# -*- coding: utf-8 -*-
def triangles():
N=[1]
while True:
yield N #generator函数与普通函数的差别:在执行过程中,遇到yield就中断,下次又继续执行
N.append(0)
N=[N[i-1] + N[i] for i in range(len(N))] #杨辉三角的生成式
if __name__ == '__main__': # 如果是运行的.py文件,就执行下面的命令。调试用
n=0
for t in triangles():
print(t)
n=n+1
if n == 10:
break
转载于:https://blog.51cto.com/12758568/2115989
Python学习笔记__3.4章 生成器相关推荐
- 【Python学习笔记】第一章基础知识:格式化输出,转义字符,变量类型转换,算术运算符,运算符优先级和赋值运算符,逻辑运算符,世界杯案例题目,条件判断if语句,猜拳游戏与三目运算符
Python学习笔记之[第一章]基础知识 前言: 一.格式化输出 1.基本格式: 2.练习代码: 二.转义字符 1.基本格式: 2.练习代码: 3.输出结果: 三.输入 1.基本格式: 2.练习代码: ...
- Python学习笔记__13.2章 requests
# 这是学习廖雪峰老师python教程的学习笔记 相比于Python内置的urllib模块,使用requests可以更好地处理URL资源. 1.使用requests 1)通过GET访问一个页面 > ...
- Python学习笔记__6.1章 类和实例
# 这是学习廖雪峰老师python教程的学习笔记 1.概览 面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类,而实例是根据类创建出来的一 ...
- Python学习笔记__1.5章 循环
# 这是学习廖雪峰老师python教程的学习笔记 1.for循环遍历 1.遍历名字 names = ['Michael', 'Bob', 'Tracy'] for name in names: pri ...
- Python学习笔记__4.1章 高阶函数
# 这是学习廖雪峰老师python教程的学习笔记 1.概览 我们知道Python内置的求绝对值的函数是abs() # 调用abs()函数可以获得一个值 >>> abs(-10) 10 ...
- Python学习笔记__10.4章 进程VS线程
# 这是学习廖雪峰老师python教程的学习笔记 1.概览 我们介绍了多进程和多线程,这是实现多任务最常用的两种方式.现在,我们来讨论一下这两种方式的优缺点 要实现多任务,通常我们会设计Master- ...
- Python学习笔记 ---第三章
函数 函数是代码的一种抽象 函数 说明 abs 绝对值 max 最大值 hex 转换为16进制 强制数据类型转换 int('123') 123 int(12.35) 12 srt(100) '100' ...
- Head First Python 学习笔记(第二章:分享你的代码)
共享你的代码 Python提供了一组技术,可以很容易地实现共享,这包括模块和一些发布工具: 模块允许你合力组织代码来实现最优共享. 发布工具允许你向全世界共享你的模块. 函数转换为模块 1.把第一章中 ...
- 深度之眼 - Python学习笔记——第四章 组合数据类型
第四章 组合数据类型 4.1 列表 列表是可变的! 4.1.1 列表的表达 序列类型:内部元素有位置关系,能通过位置序号访问其中元素 列表是一个可以使用多种类型元素,支持元素的增.删.查.改操作的序列 ...
- Python学习笔记之迭代器与生成器
迭代器 迭代是Python最强大的功能之一,是访问集合元素的一种方式. 迭代器是一个可以记住遍历的位置的对象. 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退 ...
最新文章
- 2018计算机职称考试题,2018年职称计算机Powerpoint考试试题及答案
- 应用系统集群解决方案
- 总共4行代码使用fastxml.json实现Java对象的序列化和反序列化
- python中注释的快捷键_【Python】注释
- 了解Stack Overflow,这是您获得编程和调试知识的途径
- mysql是否需要设置外键_数据库到底需不需要设置外键?
- MT6762/MT6763处理器参数比较,MT6762参考设计资料介绍
- ESD(静电释放)下半部分
- 《The Selfish Giant》
- 企业微信后台应用配置步骤
- 2020-10-19 Nvidia与vGPU
- 安卓--记账软件课程设计
- 国内顶尖风光摄影家集锦(作品集+拍摄技巧)
- 常见多变量/多元统计分析方法分类图
- 计算机电源好坏判断,怎么判断电源的好坏啊?
- 计算机后台 鼠标灯不亮,开机一直黑屏键盘鼠标灯不亮
- 邮件协议rfc822文档
- 初创公司必看 杭州靠谱2B创业梯队
- 破解Word密码保护的简单方法(转)
- js中every用法_详解JavaScript中的every()方法
热门文章
- php 控制移动图片,解决PHP move_uploaded_file函数移动图片失败
- 【全示例通过】防沉迷实名认证系统接口测试代码(包含Golang和Java版本)
- 12 岁印度少年出手,Ubuntu Unity 桌面 6 年后起死回生
- 纯JS实现购物车jQuery实现购物车
- 金蝶webapi实例
- 关于jupyter notebook中change kernel
- 并行信号处理技术-序 未来军工云系统
- 腾讯IEG安卓开发日常实习一面
- Simulink学习——模块封装(创建简单封装)
- java ndc_log4j MDC NDC详解