python 关键字yield解析

yield 的作用就是把一个函数变成一个 generator,带有 yield 的函数不再是一个普通函数,Python 解释器会将其视为一个 generator。
yield 的好处是显而易见的,把一个函数改写为一个 generator 就获得了迭代能力,比起用类的实例保存状态来计算下一个 next() 的值,不仅代码简洁,而且执行流程异常清晰

# eg_v1 建立一个列表,逐项地读取这个列表,那么这个列表就是一个可迭代对象。

>>> mylist = [1,2,3,4,5]
>>> for i in mylist:
... print i
...
1
2
3
4
5

  

使用一个列表生成式来建立一个列表的时候,也是建立了一个可迭代的对象

>>> mylist = [x * x for x in range(5)]
>>> for i in mylist:
... print i
...
0
1
4
9
16

注:使用 for .. in .. 语法的叫做一个迭代器:列表,字符串,文件等,缺点是内存开销大

生成器
生成器是可以迭代的,但是只可以读取它一次 ,因为它并不把所有的值放在内存中,它是实时地生成数据。

>>> mygenerator = (x * x for x in range(5))
>>> for i in mygenerator:
... print i
...
0
1
4
9
16

  

yield关键字
yield 是一个类似 return 的关键字,只是这个函数返回的是个生成器

>>> def createGenerator():
... mylist = range(5)
... for i in mylist:
... yield i * i
...
>>>
>>> mygenerator = createGenerator()
>>> print (mygenerator)
<generator object createGenerator at 0x7fb6f3fdf820>
>>> for i in mygenerator:
... print i
...
0
1
4
9
16
>>>

可以理解:当你调用这个函数的时候,函数内部的代码并不立马执行 ,这个函数只是返回一个生成器对象,使用for进行迭代的时候,执行函数内的代码

python 关键字yield解析的更多相关文章

  1. Python关键字yield的解释(stackoverflow)

    3.1. 提问者的问题 Python关键字yield的作用是什么?用来干什么的? 比如,我正在试图理解下面的代码: def node._get_child_candidates(self, dista ...

  2. python 关键字yield

    问题 Python 关键字 yield 的作用是什么?用来干什么的? 比如,我正在试图理解下面的代码: def node._get_child_candidates(self, distance, m ...

  3. Python关键字yield详解以及Iterable 和Iterator区别

    迭代器(Iterator) 为了理解yield是什么,首先要明白生成器(generator)是什么,在讲生成器之前先说说迭代器(iterator),当创建一个列表(list)时,你可以逐个的读取每一项 ...

  4. Python中yield解析

    小探yield 查看 python yield 文档 yield expressions: Using a yield expression in a function's body causes t ...

  5. Python关键字yield的解释

    yield 是一个类似 return 的关键字,只是这个函数返回的是个生成器. >>> def createGenerator() : ... mylist = range(3) . ...

  6. python关键字--yield

    彻底理解Python中的yield

  7. 深入理解python的yield和generator

    原文发表在我的博客主页,转载请注明出处 前言 没有用过的东西,没有深刻理解的东西很难说自己会,而且被别人一问必然破绽百出.虽然之前有接触过python协程的概念,但是只是走马观花,这两天的一次交谈中, ...

  8. [转]Python中yield的解释

    转自: http://python.jobbole.com/83610/ 本文作者: 伯乐在线 - wklken .未经作者许可,禁止转载!欢迎加入伯乐在线 专栏作者. 翻译 来源于stackover ...

  9. [翻译]Python中yield的解释

    问题: Python中yield关键字的作用是什么?它做了什么? 例如,我想理解以下代码 def node._get_child_candidates(self, distance, min_dist ...

随机推荐

  1. 可快速生成增删curd改查功能的插件

    仿造Django中的admin自己实现增删改查.模糊搜索.批量操作.条件筛选.popup功能的插件 1.创建组件 首先创建一个app,这里取名为stark,在settings.py中将其进行注册 IN ...

  2. vue 常用问题

    缺少style-loader 或者 stylus-loader 等问题 在文件[package.json]分支:[devDependencies]添加 版本号: "stylus": ...

  3. ROS开发与常用命令

    初始化ROS的catkin工作空间:catkin_init_workspace 编译ROS的catkin工作空间:catkin_make 读取当前catkin工作空间的环境变量:source deve ...

  4. [django]主次表如何取出对方数据[主表obj.子表__set()]

    [sql]mysql管理手头手册,多对多sql逻辑 国家--城市例子 class Country(models.Model): name = models.CharField(max_length=3 ...

  5. 【Java】-NO.16.EBook.4.Java.1.002-【疯狂Java讲义第3版 李刚】- 数据类型

    1.0.0 Summary Tittle:[Java]-NO.16.EBook.4.Java.1.002-[疯狂Java讲义第3版 李刚]- 数据类型 Style:EBook Series:Java ...

  6. zabbix 自定义监控文本内容

    需求:监控服务器硬盘使用率是否有超过80%的 需要监控的文本 root@zabbix zabbix]# cat /etc/zabbix/scripts/data/monitor_disk.txt &q ...

  7. python-对象与参数传递

    对象与参数传递 python对象 在python中,一切都是对象,变量存储的是对象的引用. 对象可以分为可变对象和不可变对象,可变与不可变是针对对象内容本身而言的. 对象分类 概念 包括 可变对象 对 ...

  8. leetcode 343 整数拆分

    1.这个题拿到之后没有什么思路,此时就应该考虑暴力法.然而每次不知道要拆成几份,没办法用循环,所以想到用递归. 如图所示进行递归,显然有很多重复的计算,所以用自底向上的动态规划. 2.还有一个问题就是 ...

  9. 题外话:Lua脚本语言存在的意义

    纯属个人见解. 大致来说:c/c++执行效率高,游戏中一些性能敏感的复杂计算需要用c/c++来实现,防止游戏卡顿和低帧率.这些复杂计算包括战斗逻辑,复杂AI,骨骼动画蒙皮骨骼点的坐标计算等等.但c++ ...

  10. java RE Validation常用

    import java.util.regex.Matcher; import java.ulil.regex.Pattern; public class RegExpUtil { public sta ...