关于 yield:

yield一词的意思有 n.产出,产量;v.让步,提供。

所以当我们定义一个生成器函数时(带yield关键字的函数):

def Iter():

for i in range(10):

yield i

这个Iter()函数的工作就是按顺序产出(生成)0~910个数字,同时,它也是一个可迭代对象。

而要产出0~9,则需通过next()函数不断调用方可,同时我们也知道,python的for循环本质就是不断调用next()函数从可迭代对象里取值。因此,若我们要输出0~9,只需:

for val in Iter():

print(val)

得到如下输出:

0

1

2

3

4

5

6

7

8

9

关于 yield from:

从字面意思上来说yield from就是 从...中生成,而实质上它的确如此。

那么问题来了,它可以从那里yield呢?

我们看回上面的:

def Iter():

for i in range(10):

yield i

这里的i是range(10)里的元素,而range(10)是一个可迭代对象(这点很重要!!!)。所以我们不妨大胆假设:yield from就是 从中生成。

那么我们试着改写一下上面的Iter():

def Iter():

yield from range(10)

再执行如下代码:

for val in Iter():

print(val)

意料之中,我们得到如下输出:

0

1

2

3

4

5

6

7

8

9

综上,yield from=for i in : yield i。

我们可以再进一步。我们知道,可迭代对象有许多,列表、元组、字典、列表生成式,甚至生成器或生成器函数本身都是一个可迭代对象。那么我们是否可以定义一个生成器函数,然后yield from它呢?

答案是肯定的:

#定义一个生成器函数

def Iter():

for i in range(10):

yield i

#定义一个 "yield from生成器函数" 的生成器函数

def yieldFromIter():

yield from Iter()

#封装print

def out():

for i in yieldFromIter():

print(i)

f __name__ == '__main__':

out()

执行上面脚本,我们同样能得到如下输出:

0

1

2

3

4

5

6

7

8

9

以上就是本人对yield,yield from的一些简单解释。如有不明,欢迎各位与我探讨。

python的本质,讨论 - 廖雪峰的官方网站相关推荐

  1. python 惰性序列_讨论 - 廖雪峰的官方网站

    @廖雪峰 首先你要理解埃氏筛法的原理,其实是很简单的. 然后用惰性序列实现埃氏筛法时,只能想象抽象过程,不能推导每一步计算机是怎么算的,就像神经网络模拟的人工智能算法,连设计者也无法理解计算机执行的步 ...

  2. python怎么理解_讨论 - 廖雪峰的官方网站

    我的电脑是win7x64的系统 安装的是Python3.4.3 这是hello.py模块 !/usr/bin/env python3 -- coding: utf-8 -- 'just a test' ...

  3. python工作流程_讨论 - 廖雪峰的官方网站

    例: class test: def __init__(self): self.__name=None @myproperty def name(self): return self.__name @ ...

  4. python3讨论交流地_讨论 - 廖雪峰的官方网站

    每个字都是经验所得,都是站在一个零基础的人的角度写的,纯手打+网上优秀资源整合,希望大家能每个字都认真看. 接下来文章会侧重在以下几方面 1.零基础如何进行人工智能的自学(以找工作为目的),包括路径规 ...

  5. python基础8(来自廖雪峰的官方网站)

    生成器 通过列表生成式,我们可以直接创建一个列表.但是,受到内存限制,列表容量肯定是有限的.而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大 ...

  6. python正确方法,方法 - 廖雪峰的官方网站

    在一个对象中绑定函数,称为这个对象的方法. 在JavaScript中,对象的定义是这样的: var xiaoming = { name: '小明', birth: 1990 }; 但是,如果我们给xi ...

  7. oracle 雪峰,讨论 - 廖雪峰的官方网站

    参考官方文档,貌似如果调取的方法包括多个参数,就应该将多个参数作为一个Class数组传入. 官方文档参考: 例子参考: 其中比较相关的几句是: // Calling No argument Metho ...

  8. python提交事务_事务 - 廖雪峰的官方网站

    在执行SQL语句的时候,某些业务要求,一系列操作必须全部执行,而不能仅执行一部分.例如,一个转账操作: -- 从id=1的账户给id=2的账户转账100元 -- 第一步:将id=1的A账户余额减去10 ...

  9. python37-32_讨论 - 廖雪峰的官方网站

    在windows下运行出现RuntimeError错误,有谁知道吗? 部分代码如下: def return_task_queue(): global task_queue return task_qu ...

最新文章

  1. 测试网站访问速度的几个小方法
  2. vue引用公用的头部和尾部文件。
  3. powerdesigner连接db2生成模型步骤
  4. django_form表单类
  5. response 流和写能一起吗_余甘果蜂蜜能一起吃吗?余甘果泡蜂蜜有什么功效?
  6. [leetcode] Single Number 查找数组中的单数
  7. viper4android使用时,ViPER4Android 目前进度 [11-21,13时16分]
  8. MYSQL的用户变量(@)和系统变量(@@)
  9. 济南清北学堂游记 Day 2.
  10. Rust: flat_map、filter_map、for_each
  11. xcode 调试提示
  12. 微信视频号视频保存,微信视频号视频下载的方法
  13. 【Fuzzy】隶属度函数和模糊推理
  14. Android相机预览,指定区域显示预览框,在区域内出现人脸进行人脸识别,并抓拍人脸照片存在本地,CameraX,虹软人脸识别
  15. 海康威视SDK控制台程序consoleDemo获取视频通道参数
  16. K8S故障排查指南:部分节点无法启动Pod资源-Pod处于ContainerCreating状态
  17. HTML+CSS实现(排行榜+棋盘+表格+图片商品列表)
  18. python第三方库文件传输_慢步学习,python库文件概述,再来点第三方库文件安装的干货...
  19. Java上传图片预览并通过后端压缩
  20. C语言:数组奇偶排序,奇数从小到大,偶数从大到小;输出

热门文章

  1. 威联通nas怎么更换大硬盘_QNAP NAS在线RAID组态迁移及在线RAID容量扩充教程
  2. vue中页面跳转传值_vue跳转方式(打开新页面)及传参操作示例
  3. html input 传值 request接到值为null,解决jsp向servlet传值为null的问题
  4. python中name没有定义_Python;NameError:未定义名称“handsum”
  5. java设计模式观察者模式_Java设计模式(9)——观察者模式
  6. c3074 无法使用带圆括号的_如何选择路面裂缝贴缝带?
  7. vue radio双向绑定_Vue是如何实现双向数据绑定的
  8. 自带flash的浏览器_小技巧:三步还你一个干净清爽无广告的360浏览器
  9. 【atcoder】GP 2 [agc036C]
  10. Spring Clould负载均衡重要组件:Ribbon中重要类的用法