要了解yield的作用,首先需明白什么是生成器(type为generator),在了解生成器之前需要了解什么是可迭代对象(iterables,可迭代序列):

list comprehension

使用list comprehension创建一个list,而list是一种可迭代对象:

>>> for i in [n**2 for n in range(n) if n%2==0]:print(i)
0
4
16
36
64

任何允许使用for x in seq处理的seq都是可迭代对象,当有大量数据并把所有值放到内存中时,这种处理方式可能不是你所需要的(过于浪费内存),也许你需要的正是一个生成器:

generator

>>> g = (n**2 for n in range(10) if n%2==0)
>>> for i in g:print(i)
0
4
16
36
64
>>> for i in g:print(g)
>>>
>>>

这和使用list comprehension解析的唯一区别在于实用( )代替了[ ]。注意,你不能对一个生成器遍历两次(阅后即焚),每个生成器只能被使用一次,

yield

yield是一个关键字,类似return,不同之处,yield返回的是一个生成器:

def gen_generator():for i in range(10):if i%2==0:yield i**2
def main():print(type(gen_generator()))for i in gen_generator():print(i)
if __name__=='__main__':main()

执行结果:

<class 'generator'>
0
4
16
36
64

有用的itertools

我们使用itertools来仿真田忌赛马的故事:

>>> import iteratools
>>> horses = '上中下'
>>> itertools.permutations(horses)
<itertools.permutations at 0x2d7b180>
>>> for i in itertools.permutations(horses):print(i)
('上', '中', '下')
('上', '下', '中')
('中', '上', '下')
('中', '下', '上')
('下', '上', '中')
('下', '中', '上')
horses = '上中下'
QiWang, ChuWang = list(itertools.permuations(horses)), list(itertools.permulations(horses))
for x in QiWang, ChuWang:print(x[0], 'vs', x[1])

结果:

('上', '中', '下') vs ('上', '中', '下')
('上', '中', '下') vs ('上', '下', '中')
('上', '中', '下') vs ('中', '上', '下')
('上', '中', '下') vs ('中', '下', '上')
('上', '中', '下') vs ('下', '上', '中')
('上', '中', '下') vs ('下', '中', '上')
('上', '下', '中') vs ('上', '中', '下')
('上', '下', '中') vs ('上', '下', '中')
('上', '下', '中') vs ('中', '上', '下')
('上', '下', '中') vs ('中', '下', '上')
('上', '下', '中') vs ('下', '上', '中')
('上', '下', '中') vs ('下', '中', '上')
('中', '上', '下') vs ('上', '中', '下')
('中', '上', '下') vs ('上', '下', '中')
('中', '上', '下') vs ('中', '上', '下')
('中', '上', '下') vs ('中', '下', '上')
('中', '上', '下') vs ('下', '上', '中')
('中', '上', '下') vs ('下', '中', '上')
('中', '下', '上') vs ('上', '中', '下')
('中', '下', '上') vs ('上', '下', '中')
('中', '下', '上') vs ('中', '上', '下')
('中', '下', '上') vs ('中', '下', '上')
('中', '下', '上') vs ('下', '上', '中')
('中', '下', '上') vs ('下', '中', '上')
('下', '上', '中') vs ('上', '中', '下')
('下', '上', '中') vs ('上', '下', '中')
('下', '上', '中') vs ('中', '上', '下')
('下', '上', '中') vs ('中', '下', '上')
('下', '上', '中') vs ('下', '上', '中')
('下', '上', '中') vs ('下', '中', '上')
('下', '中', '上') vs ('上', '中', '下')
('下', '中', '上') vs ('上', '下', '中')
('下', '中', '上') vs ('中', '上', '下')
('下', '中', '上') vs ('中', '下', '上')
('下', '中', '上') vs ('下', '上', '中')
('下', '中', '上') vs ('下', '中', '上')

Python基础——yield的使用与解释相关推荐

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

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

  2. Python精讲Numpy基础,大牛笔记详细解释

    https://www.toutiao.com/a6664936105076326920/ 总认为Numpy是渣渣,直到深入接触以后才知道功能这么强大.堪比Matlab啊.果然是人生苦短,我用Pyth ...

  3. matlab imcrop 对应python函数_Python精讲Numpy基础,大牛笔记详细解释

    总认为Numpy是渣渣,直到深入接触以后才知道功能这么强大.堪比Matlab啊.果然是人生苦短,我用Python.所以本文作为一个记录&笔记,文章内容大多数取自网络以&官网快速入门等, ...

  4. python基础代码大全博客园,python基础代码大全解释

    python必背入门代码是什么? python必背代码是:defnot_empty(s):returnsandlen(s.strip())>0#returnsands.strip()#如果直接单 ...

  5. 进击的Python【第一章】:Python背景初探与Python基础(一)

    Python背景初探 一.Python起源 Python的创始人为Guido van Rossum.1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,做 ...

  6. python基础之day1

    Python 简介 Python是著名的"龟叔"Guido van Rossum在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言. Python为我们提供了非常完善 ...

  7. python介绍和用途-Python基础介绍(一)

    Python基础介绍(一) 1. python是什么编程语言 编译型与解释型 ​编译器吧源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机可以直接以极其语言来运行此程序,速度很快 ...

  8. python基础入门视频-Python基础入门视频课程——笔记

    Python基础,主讲:汤小洋 一.Python简介 1. Python是什么? ​ Python是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum(龟叔)于1989年 ...

  9. eclipse python_【Python基础】Python基础语法

    编程与Python 1.什么是编程 人为安排计算机解决某个问题的方法和步骤. 2.编程的语言 机器语言:二进制代码表示的计算机能够直接识别和执行的一种机器指令的集合ADD代表运算符号"+&q ...

最新文章

  1. Codeforces Round #476 (Div. 2) C. Greedy Arkady
  2. 电气备自投笔记书籍介绍(持续更新中)
  3. php制图汉字,PHP用imageTtfText函数在图片上写入汉字
  4. java----连接池C3p0使用的补充
  5. freemarker小例子
  6. 树莓派 触摸屏_如何用树莓派搭建一个颗粒物(PM2.5)传感器
  7. Android深入源代码分析理解Aidl总体调用流程(雷惊风)
  8. jenkins vue 打包特别慢_从零开始 使用VUE开发桌面客户端
  9. 快速入门上手第一课 | 从云计算到 Serverless
  10. ActivityManager: Warning: Activity not started,...
  11. 概要设计说明书的书写
  12. 杭州自己缴纳社保五险条件
  13. 北京链家网租房信息的数据分析项目实战
  14. 五笔难拆字拆分方法汇总及详解
  15. 互联网晚报 | 6月28日 星期二|​ QQ回应大规模账号被盗;iPhone 14系列新机最快8月初量产;微信表情符号写入判决...
  16. DataX--异构数据源数据交换工具
  17. java将string转为json_java 怎么将string转为json数据
  18. 72 ----直纹面、二次直纹面、单叶双曲面、双曲抛物面
  19. 玩吃鸡用什么蓝牙耳机比较好?内行推荐四款吃鸡低延迟蓝牙耳机
  20. Linux和GNU系统的关系详解

热门文章

  1. 数值方法与计算机算法试卷,《数值方法与计算机算法》课程教学大纲.pdf
  2. linux 空信息,为什么recv()函数收到空消息?
  3. Git教程——如何创建一个版本库(Repository)
  4. VS2015+OpenCV3.4.2+Win10+简单调用摄像头
  5. opencv基础:adaboost+haar目标检测技术(上)
  6. C++ 读取CSV文件中的数据到Mat
  7. c++并发编程之thread::join()和thread::detach()(转)
  8. MongoDB可视化工具RoboMongo----Windows安装
  9. 【转】Linux內核驅動之GPIO子系統(一)GPIO的使用 _蝸牛
  10. 【数据结构上机练习】5.栈的简单操作(2)