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

相关文章
|
16天前
|
Linux 网络安全 Python
linux centos上安装python3.11.x详细完整教程
这篇文章提供了在CentOS系统上安装Python 3.11.x版本的详细步骤,包括下载、解压、安装依赖、编译配置、解决常见错误以及版本验证。
139 1
linux centos上安装python3.11.x详细完整教程
|
2月前
|
数据采集 存储 搜索推荐
打造个性化网页爬虫:从零开始的Python教程
【8月更文挑战第31天】在数字信息的海洋中,网页爬虫是一艘能够自动搜集网络数据的神奇船只。本文将引导你启航,用Python语言建造属于你自己的网页爬虫。我们将一起探索如何从无到有,一步步构建一个能够抓取、解析并存储网页数据的基础爬虫。文章不仅分享代码,更带你理解背后的逻辑,让你能在遇到问题时自行找到解决方案。无论你是编程新手还是有一定基础的开发者,这篇文章都会为你打开一扇通往数据世界的新窗。
|
3天前
|
数据可视化 IDE 开发工具
【Python篇】PyQt5 超详细教程——由入门到精通(中篇二)
【Python篇】PyQt5 超详细教程——由入门到精通(中篇二)
45 13
|
3天前
|
监控 数据可视化 搜索推荐
【Python篇】matplotlib超详细教程-由入门到精通(下篇)2
【Python篇】matplotlib超详细教程-由入门到精通(下篇)
17 8
|
3天前
|
数据可视化 API 数据处理
【Python篇】matplotlib超详细教程-由入门到精通(上篇)
【Python篇】matplotlib超详细教程-由入门到精通(上篇)
21 5
|
3天前
|
编解码 数据可视化 IDE
【Python篇】matplotlib超详细教程-由入门到精通(下篇)1
【Python篇】matplotlib超详细教程-由入门到精通(下篇)
17 3
|
3天前
|
数据可视化 IDE 开发者
【Python篇】PyQt5 超详细教程——由入门到精通(终篇)
【Python篇】PyQt5 超详细教程——由入门到精通(终篇)
8 1
|
3天前
|
数据可视化 数据处理 数据库
【Python篇】PyQt5 超详细教程——由入门到精通(中篇一)
【Python篇】PyQt5 超详细教程——由入门到精通(中篇一)
9 1
|
3天前
|
数据可视化 IDE Linux
【Python篇】PyQt5 超详细教程——由入门到精通(序篇)
【Python篇】PyQt5 超详细教程——由入门到精通(序篇)
8 1
|
15天前
|
Python Windows
python入门保姆级教程 | 13
python入门保姆级教程 | 13