Python yield 小结和实例


Posted in Python onApril 25, 2014

一个带有 yield 的函数就是一个 generator,它和普通函数不同,生成一个 generator 看起来像函数调用,但不会执行任何函数代码,直到对其调用 next()(在 for 循环中会自动调用 next())才开始执行。虽然执行流程仍按函数的流程执行,但每执行到一个 yield 语句就会中断,并返回一个迭代值,下次执行时从 yield 的下一个语句继续执行。看起来就好像一个函数在正常执行的过程中被 yield 中断了数次,每次中断都会通过 yield 返回当前的迭代值。

yield 的好处:把一个函数改写为一个 generator 就获得了迭代能力,比起用类的实例保存状态来计算下一个 next() 的值,不仅代码简洁,而且执行流程异常清晰。

测试代码:
 

#!/usr/bin/env python
#-*- coding:utf8 -*-
def fab(max):
    """斐波那契?盗?""
    n, a, b = 0, 0, 1
    while n < max:
        yield b
        a, b = b, a + b
        n += 1

def perm(items, n=None):
    """全排列"""
    if n is None:
        n = len(items)
    for i in range(len(items)):
        v = items[i:i+1]
        if n == 1:
            yield v
        else:
            rest = items[:i] + items[i+1:]
            for p in perm(rest, n-1):
                yield v + p
if __name__ == '__main__':
    for n in fab(5):
        print n
    print  "全排列:123"
    for n in perm("123"):
        print n
Python 相关文章推荐
用Python实现通过哈希算法检测图片重复的教程
Apr 02 Python
在Django中进行用户注册和邮箱验证的方法
May 09 Python
Python中字符串的修改及传参详解
Nov 30 Python
Python基于列表list实现的CRUD操作功能示例
Jan 05 Python
浅谈pandas中DataFrame关于显示值省略的解决方法
Apr 08 Python
Python3中正则模块re.compile、re.match及re.search函数用法详解
Jun 11 Python
浅谈dataframe中更改列属性的方法
Jul 10 Python
Python 3.6 -win64环境安装PIL模块的教程
Jun 20 Python
解决python3 安装不了PIL的问题
Aug 16 Python
Python如何获取Win7,Win10系统缩放大小
Jan 10 Python
Python基于Tkinter编写crc校验工具
May 06 Python
python 发送邮件的示例代码(Python2/3都可以直接使用)
Dec 03 Python
python计数排序和基数排序算法实例
Apr 25 #Python
python处理圆角图片、圆形图片的例子
Apr 25 #Python
python实现的阳历转阴历(农历)算法
Apr 25 #Python
Python实现的简单万年历例子分享
Apr 25 #Python
python实现simhash算法实例
Apr 25 #Python
python实现DNS正向查询、反向查询的例子
Apr 25 #Python
python网络编程之TCP通信实例和socketserver框架使用例子
Apr 25 #Python
You might like
了解咖啡雨林联盟认证 什么是雨林认证 雨林认证是什么意思
2021/03/05 新手入门
保存到桌面、设为桌面且带图标的PHP代码
2013/11/19 PHP
php的sso单点登录实现方法
2015/01/08 PHP
wamp服务器访问php非常缓慢的解决过程
2015/07/01 PHP
PHP异常处理Exception类
2015/12/11 PHP
php session_decode函数用法讲解
2019/05/26 PHP
jQuery Validation插件remote验证方式的Bug解决
2010/07/01 Javascript
理解JavaScript中的对象 推荐
2011/01/09 Javascript
jQuery EasyUI API 中文文档 - Pagination分页
2011/09/29 Javascript
使用jquery.upload.js实现异步上传示例代码
2014/07/29 Javascript
利用jQuery.Validate异步验证用户名是否存在(推荐)
2016/12/09 Javascript
JS实现一个简单的日历
2017/02/22 Javascript
AngularJS折叠菜单实现方法示例
2017/05/18 Javascript
JS设计模式之观察者模式实现实时改变页面中金额数的方法
2018/02/05 Javascript
Angular2.0实现modal对话框的方法示例
2018/02/18 Javascript
Puppeteer环境搭建的详细步骤
2018/09/21 Javascript
微信小程序实现发微博功能的示例代码
2020/06/24 Javascript
python通过apply使用元祖和列表调用函数实例
2015/05/26 Python
Python3使用requests包抓取并保存网页源码的方法
2016/03/15 Python
使用Python对Csv文件操作实例代码
2017/05/12 Python
如何在sae中设置django,让sae的工作环境跟本地python环境一致
2017/11/21 Python
Numpy截取指定范围内的数据方法
2018/11/14 Python
Python enumerate函数功能与用法示例
2019/03/01 Python
详解Python中的测试工具
2019/06/09 Python
python安装gdal的两种方法
2019/10/29 Python
python中sort sorted reverse reversed函数的区别说明
2020/05/11 Python
Python字符串函数strip()原理及用法详解
2020/07/23 Python
python中slice参数过长的处理方法及实例
2020/12/15 Python
使用 CSS3 中@media 实现网页自适应的示例代码
2020/03/24 HTML / CSS
水芝澳美国官网:H2O Plus
2016/10/15 全球购物
Waterford加拿大官方网站:世界著名的水晶杯品牌
2016/11/01 全球购物
Under Armour瑞典官方网站:美国高端运动科技品牌
2018/11/21 全球购物
应届毕业生个人自荐信范文
2013/11/30 职场文书
维修工先进事迹
2014/05/29 职场文书
四十年同学聚会致辞
2015/07/28 职场文书
vue+iview实现手机号分段输入框
2022/03/25 Vue.js