飘逸的python - yield简明教程

简介:
发现还有非常多人对yield不理解,云里雾里,于是试着用文字表述.

仅仅要函数含有yield语句,它就返回一个生成器 .所以我们与其把其看成函数定义,不如看作是 生成器定义 .函数用 return 返回,而生成器用 yield 返回.
接下来是yield的行为.

比方

def html():
    yield 'header'
    for i in range(5):
        yield i
    yield 'footer'

h = html()#此时h变量就是一个生成器.
for x in h:#遍历生成器
    print x
怎么理解这个函数呢?
使用 "yield消除技术" ,用一个结果变量来收集yield的东西并返回.
于是转换成

def html():
    ret = []
    ret.append('header')
    for i in range(5):
        ret.append(i)
    ret.append('footer')
    return ret
能够看到,yield语句没了,全部东西都在ret这个序列.

生成器的强大魔法 在于它是延迟运行的,在须要的时候它才去运行代码,它"记住"了yield的运行位置,获取下一个结果的时候从上一次yield的位置继续往下走.
所以生成器相对于list,它每一个时刻仅仅保存一个当前结果,节省了内存,缺点是无法用下标索引,遍历一次就没了.还有一个优点是能够生成无穷序列,如cycle.

须要注意的是,当我们调用函数的时候,它并不開始运行函数体代码,仅仅是返回一个生成器.
比方
def A():
    print 'hehe'
    yield 1
    yield 2

当我们A()时,并不会print 'hehe',而仅仅有当我们遍历的时候,它才開始运行,从函数体第一行代码直到第一个yield,而后继续往下运行代码到下一个yield,如此下去.














本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/5118561.html,如需转载请自行联系原作者

相关文章
|
18天前
|
机器学习/深度学习 算法 搜索推荐
从理论到实践,Python算法复杂度分析一站式教程,助你轻松驾驭大数据挑战!
【10月更文挑战第4天】在大数据时代,算法效率至关重要。本文从理论入手,介绍时间复杂度和空间复杂度两个核心概念,并通过冒泡排序和快速排序的Python实现详细分析其复杂度。冒泡排序的时间复杂度为O(n^2),空间复杂度为O(1);快速排序平均时间复杂度为O(n log n),空间复杂度为O(log n)。文章还介绍了算法选择、分而治之及空间换时间等优化策略,帮助你在大数据挑战中游刃有余。
45 4
|
2天前
|
Python
SciPy 教程 之 SciPy 模块列表 6
SciPy教程之常量模块介绍:涵盖公制、二进制(字节)、质量、角度、时间、长度、压强、体积、速度、温度、能量、功率及力学单位。示例展示了角度单位转换为弧度的几个常用常量。
13 7
|
2天前
|
Python
SciPy 教程 之 SciPy 模块列表 7
`scipy.constants` 模块提供了常用的时间单位转换为秒数的功能。例如,`constants.hour` 返回 3600.0 秒,表示一小时的秒数。其他常用时间单位包括分钟、天、周、年和儒略年。
11 6
|
1天前
|
Python
SciPy 教程 之 SciPy 模块列表 9
SciPy教程之常量模块介绍,涵盖多种单位类型,如公制、质量、角度、时间、长度、压强等。示例展示了如何使用`scipy.constants`模块查询不同压强单位对应的帕斯卡值,包括atm、bar、torr、mmHg和psi。
5 1
|
1天前
|
Python
SciPy 教程 之 SciPy 模块列表 8
SciPy教程之常量模块单位类型介绍。该模块包含多种单位,如公制、质量、角度、时间、长度、压强、体积、速度、温度、能量、功率和力学单位。示例展示了部分长度单位的转换值,例如英寸、英尺、海里等。
8 1
|
3天前
|
知识图谱 Python
SciPy 教程 之 SciPy 模块列表 5
本教程介绍SciPy常量模块中的单位类型,涵盖公制、质量、时间、长度等单位。示例代码展示了如何使用`scipy.constants`模块获取不同质量单位的千克值,如公吨、磅、盎司、原子质量单位等。
9 1
|
15天前
|
数据采集 Web App开发 数据可视化
Python爬虫教程:Selenium可视化爬虫的快速入门
Python爬虫教程:Selenium可视化爬虫的快速入门
|
24天前
|
数据可视化 IDE 开发工具
【Python篇】PyQt5 超详细教程——由入门到精通(中篇二)
【Python篇】PyQt5 超详细教程——由入门到精通(中篇二)
184 13
|
24天前
|
监控 数据可视化 搜索推荐
【Python篇】matplotlib超详细教程-由入门到精通(下篇)2
【Python篇】matplotlib超详细教程-由入门到精通(下篇)
30 8
|
21天前
|
缓存 测试技术 Apache
告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
【10月更文挑战第1天】告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
52 4