# 这是学习廖雪峰老师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章 生成器相关推荐

  1. 【Python学习笔记】第一章基础知识:格式化输出,转义字符,变量类型转换,算术运算符,运算符优先级和赋值运算符,逻辑运算符,世界杯案例题目,条件判断if语句,猜拳游戏与三目运算符

    Python学习笔记之[第一章]基础知识 前言: 一.格式化输出 1.基本格式: 2.练习代码: 二.转义字符 1.基本格式: 2.练习代码: 3.输出结果: 三.输入 1.基本格式: 2.练习代码: ...

  2. Python学习笔记__13.2章 requests

    # 这是学习廖雪峰老师python教程的学习笔记 相比于Python内置的urllib模块,使用requests可以更好地处理URL资源. 1.使用requests 1)通过GET访问一个页面 > ...

  3. Python学习笔记__6.1章 类和实例

    # 这是学习廖雪峰老师python教程的学习笔记 1.概览 面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类,而实例是根据类创建出来的一 ...

  4. Python学习笔记__1.5章 循环

    # 这是学习廖雪峰老师python教程的学习笔记 1.for循环遍历 1.遍历名字 names = ['Michael', 'Bob', 'Tracy'] for name in names: pri ...

  5. Python学习笔记__4.1章 高阶函数

    # 这是学习廖雪峰老师python教程的学习笔记 1.概览 我们知道Python内置的求绝对值的函数是abs() # 调用abs()函数可以获得一个值 >>> abs(-10) 10 ...

  6. Python学习笔记__10.4章 进程VS线程

    # 这是学习廖雪峰老师python教程的学习笔记 1.概览 我们介绍了多进程和多线程,这是实现多任务最常用的两种方式.现在,我们来讨论一下这两种方式的优缺点 要实现多任务,通常我们会设计Master- ...

  7. Python学习笔记 ---第三章

    函数 函数是代码的一种抽象 函数 说明 abs 绝对值 max 最大值 hex 转换为16进制 强制数据类型转换 int('123') 123 int(12.35) 12 srt(100) '100' ...

  8. Head First Python 学习笔记(第二章:分享你的代码)

    共享你的代码 Python提供了一组技术,可以很容易地实现共享,这包括模块和一些发布工具: 模块允许你合力组织代码来实现最优共享. 发布工具允许你向全世界共享你的模块. 函数转换为模块 1.把第一章中 ...

  9. 深度之眼 - Python学习笔记——第四章 组合数据类型

    第四章 组合数据类型 4.1 列表 列表是可变的! 4.1.1 列表的表达 序列类型:内部元素有位置关系,能通过位置序号访问其中元素 列表是一个可以使用多种类型元素,支持元素的增.删.查.改操作的序列 ...

  10. Python学习笔记之迭代器与生成器

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

最新文章

  1. 2018计算机职称考试题,2018年职称计算机Powerpoint考试试题及答案
  2. 应用系统集群解决方案
  3. 总共4行代码使用fastxml.json实现Java对象的序列化和反序列化
  4. python中注释的快捷键_【Python】注释
  5. 了解Stack Overflow,这是您获得编程和调试知识的途径
  6. mysql是否需要设置外键_数据库到底需不需要设置外键?
  7. MT6762/MT6763处理器参数比较,MT6762参考设计资料介绍
  8. ESD(静电释放)下半部分
  9. 《The Selfish Giant》
  10. 企业微信后台应用配置步骤
  11. 2020-10-19 Nvidia与vGPU
  12. 安卓--记账软件课程设计
  13. 国内顶尖风光摄影家集锦(作品集+拍摄技巧)
  14. 常见多变量/多元统计分析方法分类图
  15. 计算机电源好坏判断,怎么判断电源的好坏啊?
  16. 计算机后台 鼠标灯不亮,开机一直黑屏键盘鼠标灯不亮
  17. 邮件协议rfc822文档
  18. 初创公司必看 杭州靠谱2B创业梯队
  19. 破解Word密码保护的简单方法(转)
  20. js中every用法_详解JavaScript中的every()方法

热门文章

  1. php 控制移动图片,解决PHP move_uploaded_file函数移动图片失败
  2. 【全示例通过】防沉迷实名认证系统接口测试代码(包含Golang和Java版本)
  3. 12 岁印度少年出手,Ubuntu Unity 桌面 6 年后起死回生
  4. 纯JS实现购物车jQuery实现购物车
  5. 金蝶webapi实例
  6. 关于jupyter notebook中change kernel
  7. 并行信号处理技术-序 未来军工云系统
  8. 腾讯IEG安卓开发日常实习一面
  9. Simulink学习——模块封装(创建简单封装)
  10. java ndc_log4j MDC NDC详解