我来解释一下这个程序:

首先大家要知道为什么这个函数可以用在for循环中。不用问,因为这个函数是可迭代的,也就是这个函数可以每次都返回一个值。

但是我们在gen()函数里看不到__iter__()和next() 方法。其实它隐藏在yield里。高级语言就是这样,隐藏了好多东西。这个和c

语言就不同了。C语言可以看到每个细节。在这里程序执行到yield 1的时候就停止了,下面的程序不再执行,然后返回一个值“1”.

当下一个for的之后程序接着往下执行到yeild 2。程序停止执行,然会返回一个值“2”。但是还有一个问题就是,最后yield下面的"next again" 会打印出来呢?这也可能就是在执行完最后一个yield 的时候,for i in gen()的时候, 发生了一些什么动作,导致最后一个yield后面的代码也被执行了。

如果我们修改一下这个程序如下:

#!/usr/bin/env python

#__metaclass__ = type

def gen():

print 'enter'

yield 1

print 'next'

return

print 'next 2'

yield 2

print 'next 3'

for i in gen():

print i

#######################

程序打印如下:

enter

1

next

看明白了这就是yield和return的区别。yield可以向下运行。而return返回后这个函数余下的部分就不能执行了。

4: yield 的原理

yield函数c语言,yield的用法相关推荐

  1. python yield函数_python之yield函数

    yield的英文单词意思是生产,刚接触Python的时候感到非常困惑,一直没弄明白yield的用法. 只是粗略的知道yield可以用来为一个函数返回值塞数据,比如下面的例子: def addlist( ...

  2. C语言struct 函数,c语言struct的用法

    C语言中先申明结构体,也就是定义结构体具体形式,而后可以把它当做普通数据类型来修饰变量,也可以在定义类型时后面直接跟着定义几个变量,下面小编就为你介绍c语言struct的用法. 基本定义:结构体,通俗 ...

  3. python yield函数的用法

    什么是yield函数? yield函数是python里面的关键字,带有yield的函数相当于一个生成器generator.当你使用一个yield的时候,对应的函数就是一个生成器 在python里面类似 ...

  4. php yield 详解,PHP yield 协程 生成器用法的了解

    写在前面 这篇文章,要和大家探讨的是 PHP yield 在 生成器用法,不带 foreach,for, while 循环的那种.就讨论 yield 将一个函数变成为生成器的用法.关于yield 特性 ...

  5. 五分钟理解yield在python中的简单用法,让你不再迷惑

    很多同学无论是在学习python还是使用python的过程中,都会遇到yield关键字,这个让人头大的问题,今天,就给大家分享一下我自学yield的心路历程 基本概念: (1)在 Python 中,使 ...

  6. arduino yield函数的作用_深入理解yield

    yield的英文单词意思是生产,刚接触Python的时候感到非常困惑,一直没弄明白yield的用法. 只是粗略的知道yield可以用来为一个函数返回值塞数据,比如下面的例子: def addlist( ...

  7. yield( )函数的使用

    yield函数在并发编程中是非常重要的一个概念,尤其在多核计算机还不是那么普及的年代,要完成一个"并发"程序,是不得不借助yield函数的. 我们知道,yield的意思是" ...

  8. Python语言学习之字母G开头函数使用集锦:global用法之详细攻略

    Python语言学习之字母G开头函数使用集锦:global用法之详细攻略 global全局变量用法 global全局变量:python使用的变量默认一定是用局部变量:如果想使用作用域之外的全局变量,则 ...

  9. Python语言学习之字母A开头函数使用集锦:assert用法之详细攻略

    Python语言学习之字母A开头函数使用集锦:assert用法之详细攻略 assert断言的用法 assert断言用法:防御性的编程.运行时对程序逻辑的检测.合约性检查(比如前置条件,后置条件).程序 ...

最新文章

  1. Question: Short And Long Read Sequencing
  2. 智能哲学:“学习机器”与“机器学习” ——解读图灵思想中的人工智能
  3. No module named cv2
  4. 04Hadoop中的setPartitionerClass/SortComparator/GroupingComparator问题
  5. 第5章 Python 数字图像处理(DIP) - 图像复原与重建8 - 估计噪声参数
  6. dbunit使用_使用dbUnit,JSON,HSQLDB和JUnit规则进行数据库单元测试
  7. FiddlerScript-常用总结
  8. 【Java从0到架构师】SpringMVC - 特殊的请求参数
  9. UML基础与应用系列文章汇总
  10. Enterprise Library 2.0 发布了...
  11. 100多套毕业论文答辩PPT模板百度网盘链接
  12. 台式计算机 cpu型号大全,电脑cpu的型号有哪些?
  13. mysql实现oracle的同义词_Oracle 同义词synonym 学习
  14. 实现HTML的简单压缩
  15. Mask to Polygons mask转Polygons并保存为labelMe json文件
  16. 机器学习:python实现LDA降维算法
  17. EMC设计的四大技巧
  18. Linux——从命令行配置网络、编辑网络配置文件
  19. [Java] 枚举类型
  20. 傅里叶谱方法-傅里叶谱方法求解基本偏微分方程(一维波动方程、 二维波动方程、一维非线性薛定谔方程)及其Matlab程序实现

热门文章

  1. word2vec的基础知识
  2. 华为U8660荣耀Honor获取ROOT权限教程 亲测可用
  3. Java 代码截取图片中的身份证
  4. Microbiome:随机过程主导亚热带河流微型真核浮游生物群落构建
  5. 算法设计与分析----循环赛日程表
  6. 【五一创作】LoRaWAN简介
  7. mysql双竖线合并_MySql 将查询结果多列合并成一行GROUP_CONCAT
  8. 定量分析---频率分布直方图(groupby,agg,round具体用法)
  9. 含有token鉴权的接口项目使用unittest框架设计测试登录,充值的接口
  10. Webstorm 舒适高效配置,打造提高生产率环境