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时间处理方法(详解)
Aug 14 Python
浅谈Django REST Framework限速
Dec 12 Python
解决Pandas to_json()中文乱码,转化为json数组的问题
May 10 Python
在CMD命令行中运行python脚本的方法
May 12 Python
Python实现ping指定IP的示例
Jun 04 Python
python之线程通过信号pyqtSignal刷新ui的方法
Jan 11 Python
wxpython绘制圆角窗体
Nov 18 Python
解决Pytorch 加载训练好的模型 遇到的error问题
Jan 10 Python
Python使用docx模块实现刷题功能代码
Feb 13 Python
python 解决mysql where in 对列表(list,,array)问题
Jun 06 Python
Python多个MP4合成视频的实现方法
Jul 16 Python
pd.drop_duplicates删除重复行的方法实现
Jun 16 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
php生成图形(Libchart)实例
2013/11/06 PHP
php不使用copy()函数复制文件的方法
2015/03/13 PHP
php制作简单模版引擎
2016/04/07 PHP
iframe子页面获取父页面元素的方法
2013/11/05 Javascript
Underscore.js常用方法总结
2015/02/28 Javascript
jquery表单对象属性过滤选择器实例分析
2015/05/18 Javascript
基于replaceChild制作简单的吞噬特效
2015/09/21 Javascript
AJAX实现瀑布流触发分页与分页触发瀑布流的方法
2016/05/23 Javascript
在js代码拼接dom对象到页面上去的模板总结(必看)
2017/02/14 Javascript
ES6新特性之Symbol类型用法分析
2017/03/31 Javascript
从零开始学习Node.js系列教程一:http get和post用法分析
2017/04/13 Javascript
JavaScript实现隐藏省略文字效果的方法
2017/04/27 Javascript
详解a++和++a的区别
2017/08/30 Javascript
解决layui弹框失效的问题
2019/09/09 Javascript
vue项目引入ts步骤(小结)
2019/10/31 Javascript
Ant Design Vue 添加区分中英文的长度校验功能
2020/01/21 Javascript
[02:27]2018DOTA2亚洲邀请赛趣味视频之钓鱼大赛 谁是垂钓冠军?
2018/04/05 DOTA
[48:31]DOTA2-DPC中国联赛 正赛 Dynasty vs XG BO3 第一场 2月2日
2021/03/11 DOTA
python实现探测socket和web服务示例
2014/03/28 Python
python使用marshal模块序列化实例
2014/09/25 Python
Django中利用filter与simple_tag为前端自定义函数的实现方法
2017/06/15 Python
使用pandas将numpy中的数组数据保存到csv文件的方法
2018/06/14 Python
移动端开发HTML5页面点击按钮后出现闪烁或黑色背景的解决办法
2018/09/19 HTML / CSS
Canvas高级路径操作之拖拽对象的实现
2019/08/05 HTML / CSS
英国领先的男士美容护发用品公司:Mankind
2016/08/31 全球购物
加拿大女包品牌:Matt & Nat
2017/05/12 全球购物
如何处理简单的PHP错误
2015/10/14 面试题
委托证明的格式
2014/01/10 职场文书
网上开店必备创业计划书
2014/01/26 职场文书
乡镇八一建军节活动方案
2014/08/24 职场文书
公司感谢信范文
2015/01/22 职场文书
2015年质量月活动总结报告
2015/03/27 职场文书
2015财务年终工作总结范文
2015/05/22 职场文书
学子宴致辞大全
2015/07/27 职场文书
TV动画「神渣☆爱豆」公开第一弹主视觉图
2022/03/21 日漫
详解Vue3使用axios的配置教程
2022/04/29 Vue.js