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实现字典(dict)和字符串(string)的相互转换方法
Mar 01 Python
Python 内置函数memoryview(obj)的具体用法
Nov 23 Python
Python 从一个文件中调用另一个文件的类方法
Jan 10 Python
Django项目中添加ldap登陆认证功能的实现
Apr 04 Python
Python 分发包中添加额外文件的方法
Aug 16 Python
树莓派3 搭建 django 服务器的实例
Aug 29 Python
Numpy中对向量、矩阵的使用详解
Oct 29 Python
python绘制动态曲线教程
Feb 24 Python
Python多线程:主线程等待所有子线程结束代码
Apr 25 Python
Keras实现将两个模型连接到一起
May 23 Python
Python读取Excel数据并生成图表过程解析
Jun 18 Python
python import 上级目录的导入
Nov 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
基于mysql的论坛(7)
2006/10/09 PHP
php中定义网站根目录的常用方法
2010/08/08 PHP
php绘图之在图片上写中文和英文的方法
2015/01/24 PHP
PHP利用APC模块实现文件上传进度条的方法
2015/01/26 PHP
php实现当前页面点击下载文件的实例代码
2016/11/16 PHP
php简单随机字符串生成方法示例
2017/04/19 PHP
PHP在弹框中获取foreach中遍历的id值并传递给地址栏
2017/06/13 PHP
PHP微信开发之微信录音临时转永久存储
2018/01/26 PHP
PHP利用curl发送HTTP请求的实例代码
2020/07/09 PHP
JavaScript 使用技巧精萃(.net html
2009/04/25 Javascript
firefox插件Firebug的使用教程
2010/01/02 Javascript
jQuery中[attribute^=value]选择器用法实例
2014/12/31 Javascript
AngularJS教程之MVC体系结构详解
2016/08/16 Javascript
JavaScript 函数的定义-调用、注意事项
2017/04/16 Javascript
实现微信小程序的wxml文件和wxss文件在webstrom的支持
2017/06/12 Javascript
JS Input里添加小图标的两种方法
2017/11/11 Javascript
jQuery 实现左右两侧菜单添加、移除功能
2018/01/02 jQuery
原生js无缝轮播插件使用详解
2020/03/09 Javascript
浅谈Python对内存的使用(深浅拷贝)
2018/01/17 Python
对numpy数据写入文件的方法讲解
2018/07/09 Python
python matplotlib 画dataframe的时间序列图实例
2019/11/20 Python
numpy np.newaxis 的实用分享
2019/11/30 Python
python代码区分大小写吗
2020/06/17 Python
css3 2D图片转动样式可以扩充到Js当中
2014/04/29 HTML / CSS
html5用video标签流式加载的实现
2020/05/20 HTML / CSS
size?德国官方网站:英国伦敦的球鞋精品店
2018/03/17 全球购物
神路信息Java面试题目
2013/03/31 面试题
shell程序中如何注释
2012/02/17 面试题
万户网络JAVA程序员岗位招聘笔试试卷
2013/01/08 面试题
J2EE中的容器都包括哪些
2013/08/21 面试题
全陪导游欢迎词
2014/01/17 职场文书
2014信息公开实施方案
2014/02/22 职场文书
年终工作总结范文2014
2014/11/27 职场文书
党员个人年度总结
2015/02/14 职场文书
市场营销计划书
2019/04/24 职场文书
恶魔之树最顶端的三颗果实 震震果实上榜,第一可以制造岩浆
2022/03/18 日漫