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分析git log日志示例
Feb 27 Python
python数据结构之二叉树的统计与转换实例
Apr 29 Python
Python里隐藏的“禅”
Jun 16 Python
python 编程之twisted详解及简单实例
Jan 28 Python
Python smtplib实现发送邮件功能
May 22 Python
Python简单过滤字母和数字的方法小结
Jan 09 Python
python实现祝福弹窗效果
Apr 07 Python
Python对HTML转义字符进行反转义的实现方法
Apr 28 Python
Python pip 安装与使用(安装、更新、删除)
Oct 06 Python
Jupyter 无法下载文件夹如何实现曲线救国
Apr 22 Python
Opencv求取连通区域重心实例
Jun 04 Python
浅谈TensorFlow中读取图像数据的三种方式
Jun 30 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
贴一个在Mozilla中常用的Javascript代码
2007/01/09 Javascript
jquery 圆形旋转图片滚动切换效果
2011/01/19 Javascript
jquery 中多条件选择器,相对选择器,层次选择器的区别
2012/07/03 Javascript
js获取事件源及触发该事件的对象
2013/10/24 Javascript
jquery ajax中使用jsonp的限制解决方法
2013/11/22 Javascript
js window.open弹出新的网页窗口
2014/01/16 Javascript
js实现键盘上下左右键选择文字并显示在文本框的方法
2015/05/07 Javascript
avalon js实现仿google plus图片多张拖动排序附源码下载
2015/09/24 Javascript
jquery彩色投票进度条简单实例演示
2020/07/23 Javascript
JavaScript实现页面跳转的几种常用方式
2015/11/28 Javascript
如何用JavaScript实现动态修改CSS样式表
2016/05/20 Javascript
js 连续赋值的简单实现
2016/06/13 Javascript
浅谈JS中String()与 .toString()的区别
2016/10/20 Javascript
js实现表单提交后不重新刷新当前页面
2016/11/30 Javascript
jq checkbox 的全选并ajax传参的实例
2017/04/01 Javascript
微信小程序返回多级页面的实现方法
2017/10/27 Javascript
微信小程序自动客服功能
2017/11/02 Javascript
微信小程序实现导航栏选项卡效果
2020/06/19 Javascript
使用Angular CLI进行Build(构建)和Serve详解
2018/03/24 Javascript
微信小程序中时间戳和日期的相互转换问题
2018/07/09 Javascript
Vue CLI3 如何支持less的方法示例
2018/08/29 Javascript
微信小程序实现底部导航
2018/11/05 Javascript
小程序实现授权登陆的解决方案
2018/12/02 Javascript
vue生命周期的探索
2019/04/03 Javascript
基于canvasJS在PHP中制作动态图表
2020/05/30 Javascript
echarts.js 动态生成多个图表 使用vue封装组件操作
2020/07/19 Javascript
python解决js文件utf-8编码乱码问题(推荐)
2018/05/02 Python
Sanic框架Cookies操作示例
2018/07/17 Python
numpy 计算两个数组重复程度的方法
2018/11/07 Python
美国班级戒指、帽子和礼服、毕业产品、年鉴:Balfour
2018/11/01 全球购物
斯洛伐克电子产品购物网站:DATART
2020/04/05 全球购物
维稳工作情况汇报
2014/10/27 职场文书
校长一岗双责责任书
2015/05/09 职场文书
民事答辩状范本
2015/05/21 职场文书
有趣的二维码:使用MyQR和qrcode来制作二维码
2021/05/10 Python
vue使用wavesurfer.js解决音频可视化播放问题
2022/04/04 Vue.js