包含yield语句的函数可以用来创建生成器对象,这样的函数也称生成器函数。yield语句与return语句的作用相似,都是用来从函数中返回值。与return语句不同的是,return语句一旦执行会立刻结束函数的运行,而每次执行到yield语句并返回一个值之后会暂停后面代码的执行,下次通过生成器对象的__next__()方法、内置函数next()、for循环遍历生成器对象元素或其他方式显式“索要”数据时继续执行。生成器具有惰性求值的特点,适合大数据处理。下面的代码演示了如何使用生成器来生成斐波那契数列:

>>> def f():

a, b = 1, 1    #序列解包,同时为多个元素赋值

while True:

yield a  #返回一个值,暂停执行,需要时再产生一个新元素

a, b = b, a+b #序列解包,继续生成新元素

>>> a = f()   #创建生成器对象

>>> for i in range(10):   #斐波那契数列中前10个元素

print(a.__next__(), end=' ')

1 1 2 3 5 8 13 21 34 55

>>> for i in f():  #斐波那契数列中第一个大于100的元素

if i > 100:

print(i, end=' ')

break

144

>>> a = f()

>>> next(a)  #使用内置函数next()获取生成器对象中的元素

1

>>> next(a)  #每次索取新元素时,由yield语句生成

1

>>> a.__next__()  #也可以调用生成器对象的__next__()方法

2

>>> a.__next__()

3

Python标准库itertools提供了一个count(start, step)函数,用来连续不断地生成无穷个数,这些数中的第一个数是start,相邻两个数的差是step。下面的代码使用生成器模拟了标准库itertools中的count()函数。

>>> def count(start, step):

num = start

while True:

yield num

num += step

>>> x = count(3, 5)

>>> for i in range(10):

print(next(x), end=' ')

3 8 13 18 23 28 33 38 43 48

>>> for i in range(10):

print(next(x), end=' ')

53 58 63 68 73 78 83 88 93 98

详解Python生成器函数和生成器对象的原理和用法相关推荐

  1. 详解Python中的位运算符规则、原理与用法

    在Python中,位运算符包括位与(&).位或(|).位求反(~).位异或(^).左移位(<<)和右移位(>>). 1. 运算方法与规则 位运算符只能适用于整数,其总体 ...

  2. map函数的用法python,详解Python map函数及Python map()函数的用法

    python map函数 map()函数 map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list ...

  3. python while函数_详解python while 函数及while和for的区别

    1.while循环(只有在条件表达式成立的时候才会进入while循环) while 条件表达式: pass while 条件表达式: pass else: pass 不知道循环次数,但确定循环条件的时 ...

  4. python for和while的用法区别_详解python while 函数及while和for的区别

    1.while循环(只有在条件表达式成立的时候才会进入while循环) while 条件表达式: pass while 条件表达式: pass else: pass 不知道循环次数,但确定循环条件的时 ...

  5. 详解 Python Map 函数

    让天下木有难学的Python! 如果你正在学习编程,那么掌握 Python map 函数是升级打怪python的机会. 想象一下:你想成为一个高级的程序员(别名:划水摸鱼工程师),希望代码编译得更快, ...

  6. 详解Python中函数和模块的特殊属性__annotations__

    众所周知,Python是一种动态类型语言,也是强类型语言.在Python语言中,使用变量之前不需要声明其类型,直接赋值即可创建变量,变量初始类型取决于等号右侧表达式的值的类型.创建之后,变量的类型可以 ...

  7. 【Python基础】2万字-详解Python基础函数,包教包会

  8. python中可变参数*args传入函数时的存储方式为_python 中文读法详解Python函数可变参数定义及其参数传递方式...

    Python函数可变参数定义及其参数传递方式详解 python中 函数不定参数的定义形式如下 1. func(*args) 传入的参数为以元组形式存在args中,如: def func(*args): ...

  9. python函数中可变参数的传递方式是_详解Python函数可变参数定义及其参数传递方式...

    Python函数可变参数定义及其参数传递方式详解 python中 函数不定参数的定义形式如下 1. func(*args) 传入的参数为以元组形式存在args中,如: def func(*args): ...

  10. python函数中可变参数的传递方式_详解Python函数可变参数定义及其参数传递方式...

    Python函数可变参数定义及其参数传递方式详解 python中 函数不定参数的定义形式如下 1. func(*args) 传入的参数为以元组形式存在args中,如: def func(*args): ...

最新文章

  1. 人人都能学会的python编程教程11:定义函数
  2. if test 多条件_VBA语法01:VBA当中的IF语句单一条件判断和多条件判断的使用
  3. Angular如何判断某个DOM节点包含Directive
  4. [蓝桥杯][历届试题]小朋友排队(树状数组)
  5. 小米5安卓使用微信X5 Blink内核调试
  6. 阵列卡直通模式和raid模式_DNF:希洛克Raid攻坚流程攻略
  7. C++模板元编程---折叠表达式
  8. myBatis的xml映射文件中传入list集合与数组做条件
  9. java 加载java文件_如何用JAVA实现加载一个文件?
  10. 2015年c语言等级考试题1 10 2分,2015年计算机二级《C语言》精选练习题及答案(2)...
  11. 如何迈出客户拜访的第一步
  12. 使用Kotlin编写Gradle插件
  13. java中文网站总汇
  14. 动易html在线编辑器,动易系统解决IE8网站后台编辑器无效问题
  15. MongoVue 破解治标不治本
  16. Worker小Demo
  17. imageJ二次开发之旅 – imageJ开源项目介绍
  18. 一、Jmeter总结
  19. 统计学 假设检验 P值
  20. ssh免密报错:Could not resolve hostname : Name or service not known

热门文章

  1. php背景时间渐变,CSS3怎么实现背景颜色渐变?(图文+视频)
  2. 三次握手的本质_关于TCP三次握手,这是我见过最好的解读了,通俗易懂
  3. python shell 继承 环境变量_Python subprocess shell 丢失环境变量 | 学步园
  4. 计算机2020中级考试题,突发!2020年中级考试分值及评分标准大变!
  5. vm虚拟机win10无法复制文件_远程桌面无法复制粘贴传输文件解决办法
  6. java rest httpclient_Httpclient与RestTemplate的比较(比httpClient更优雅的Restful URL访问)...
  7. mvc5控制器修改html,ASP.NET MVC Razor:如何在控制器动作中呈现Razor局部视图的HTML...
  8. Job 存储和持久化 (第四部分)
  9. php 实现数组转json数据结构,php怎么实现数组转json
  10. mysql 9 5.5.29_在CentOS 6.3中安装与配置Mysql-5.5.29的方法