博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
飘逸的python - yield简明教程
阅读量:6574 次
发布时间:2019-06-24

本文共 823 字,大约阅读时间需要 2 分钟。

发现还有非常多人对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,如此下去.

转载地址:http://krrjo.baihongyu.com/

你可能感兴趣的文章
Windows 2012 R2 FSMO角色相关小记录
查看>>
(小蚂蚁站长吧)网站优化做好这八步你就是seo第一
查看>>
使用流的方式往页面前台输出图片
查看>>
java核心技术反射
查看>>
我的友情链接
查看>>
Maven创建新的依赖项目
查看>>
2015年10月26日作业
查看>>
LAMP,安装脚本
查看>>
Java异常总结
查看>>
DHCP
查看>>
电脑上怎样压缩图片大小
查看>>
新来的发一个帖子
查看>>
Nginx 支持webSocket 响应403
查看>>
lnmp安装
查看>>
FTP工作方式
查看>>
Linux文件和目录管理常用命令(中)
查看>>
Ubuntu16.04 ssh安及root登录
查看>>
C语言dos程序源代码分享(进制转换器)
查看>>
php项目中常用的log日志记录方法
查看>>
LogParser 导入MSSQL
查看>>