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实现计算倒数的方法
Jul 11 Python
python遍历 truple list dictionary的几种方法总结
Sep 11 Python
对python for 文件指定行读写操作详解
Dec 29 Python
谈谈Python中的while循环语句
Mar 10 Python
对numpy下的轴交换transpose和swapaxes的示例解读
Jun 26 Python
Python 导入文件过程图解
Oct 15 Python
Python面向对象封装操作案例详解
Dec 31 Python
简单了解Java Netty Reactor三种线程模型
Apr 26 Python
python新手学习使用库
Jun 11 Python
keras实现基于孪生网络的图片相似度计算方式
Jun 11 Python
Python Merge函数原理及用法解析
Sep 16 Python
使用Python获取字典键对应值的方法
Apr 26 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
全国中波电台频率表
2020/03/11 无线电
从康盛产品(discuz)提取出来的模板类
2011/06/28 PHP
php的declare控制符和ticks教程(附示例)
2014/03/21 PHP
PHP中exec与system用法区别分析
2014/09/22 PHP
php实现检查文章是否被百度收录
2015/01/27 PHP
最新制作ThinkPHP3.2.3完全开发手册
2015/11/23 PHP
解决火狐浏览器下JS setTimeout函数不兼容失效不执行的方法
2012/11/14 Javascript
javaScript让文本框内的最后一个文字的后面获得焦点实现代码
2013/01/06 Javascript
JSON序列化与解析原生JS方法且IE6和chrome测试通过
2013/09/05 Javascript
jQuery实现冻结表格行和列
2015/04/29 Javascript
jQuery代码性能优化的10种方法
2016/06/21 Javascript
原生js实现日期计算器功能
2017/02/17 Javascript
javascript数据结构中栈的应用之符号平衡问题
2017/04/11 Javascript
微信小程序 新建登录页并实现tabBar隐藏
2017/06/13 Javascript
在angularJs中进行数据遍历的2种方法
2018/10/08 Javascript
通过实例学习React中事件节流防抖
2019/06/17 Javascript
通过layer实现可输入的模态框的例子
2019/09/27 Javascript
Nautil 中使用双向数据绑定的实现
2019/10/02 Javascript
element el-table表格的二次封装实现(附表格高度自适应)
2021/01/19 Javascript
Node.js中的异步生成器与异步迭代详解
2021/01/31 Javascript
[54:19]完美世界DOTA2联赛PWL S2 Magma vs PXG 第二场 11.28
2020/12/01 DOTA
python通过scapy获取局域网所有主机mac地址示例
2014/05/04 Python
在Python的Django框架中编写错误提示页面
2015/07/22 Python
Python中的模块导入和读取键盘输入的方法
2015/10/16 Python
Pandas-Cookbook 时间戳处理方式
2019/12/07 Python
python小白学习包管理器pip安装
2020/06/09 Python
澳大利亚制造的羊皮靴:Original UGG Boots
2017/11/13 全球购物
英国领先的高街书籍专家:Waterstones
2018/02/01 全球购物
如果让你测试一台高速激光打印机,你都会进行哪些测试
2012/12/04 面试题
传播学专业毕业生自荐信
2013/11/04 职场文书
社团活动总结模板
2014/06/30 职场文书
转让协议书范本
2014/09/13 职场文书
小学生纪念九一八事变演讲稿
2014/09/14 职场文书
2014年发展党员工作总结
2014/11/12 职场文书
祝福语集锦:给妹妹结婚的祝福语
2019/12/18 职场文书
Apache SeaTunnel实现 非CDC数据抽取
2022/05/20 Servers