飘逸的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,如需转载请自行联系原作者

相关文章
|
4天前
|
机器学习/深度学习 算法 搜索推荐
从理论到实践,Python算法复杂度分析一站式教程,助你轻松驾驭大数据挑战!
【10月更文挑战第4天】在大数据时代,算法效率至关重要。本文从理论入手,介绍时间复杂度和空间复杂度两个核心概念,并通过冒泡排序和快速排序的Python实现详细分析其复杂度。冒泡排序的时间复杂度为O(n^2),空间复杂度为O(1);快速排序平均时间复杂度为O(n log n),空间复杂度为O(log n)。文章还介绍了算法选择、分而治之及空间换时间等优化策略,帮助你在大数据挑战中游刃有余。
19 4
|
23天前
|
Linux 网络安全 Python
linux centos上安装python3.11.x详细完整教程
这篇文章提供了在CentOS系统上安装Python 3.11.x版本的详细步骤,包括下载、解压、安装依赖、编译配置、解决常见错误以及版本验证。
250 1
linux centos上安装python3.11.x详细完整教程
|
2月前
|
数据采集 存储 搜索推荐
打造个性化网页爬虫:从零开始的Python教程
【8月更文挑战第31天】在数字信息的海洋中,网页爬虫是一艘能够自动搜集网络数据的神奇船只。本文将引导你启航,用Python语言建造属于你自己的网页爬虫。我们将一起探索如何从无到有,一步步构建一个能够抓取、解析并存储网页数据的基础爬虫。文章不仅分享代码,更带你理解背后的逻辑,让你能在遇到问题时自行找到解决方案。无论你是编程新手还是有一定基础的开发者,这篇文章都会为你打开一扇通往数据世界的新窗。
|
1天前
|
数据采集 Web App开发 数据可视化
Python爬虫教程:Selenium可视化爬虫的快速入门
Python爬虫教程:Selenium可视化爬虫的快速入门
|
9天前
|
数据可视化 IDE 开发工具
【Python篇】PyQt5 超详细教程——由入门到精通(中篇二)
【Python篇】PyQt5 超详细教程——由入门到精通(中篇二)
150 13
|
9天前
|
监控 数据可视化 搜索推荐
【Python篇】matplotlib超详细教程-由入门到精通(下篇)2
【Python篇】matplotlib超详细教程-由入门到精通(下篇)
22 8
|
7天前
|
缓存 测试技术 Apache
告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
【10月更文挑战第1天】告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
30 4
|
9天前
|
数据可视化 API 数据处理
【Python篇】matplotlib超详细教程-由入门到精通(上篇)
【Python篇】matplotlib超详细教程-由入门到精通(上篇)
51 5
|
9天前
|
编解码 数据可视化 IDE
【Python篇】matplotlib超详细教程-由入门到精通(下篇)1
【Python篇】matplotlib超详细教程-由入门到精通(下篇)
24 3
|
9天前
|
数据可视化 IDE 开发者
【Python篇】PyQt5 超详细教程——由入门到精通(终篇)
【Python篇】PyQt5 超详细教程——由入门到精通(终篇)
16 1