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 struct.unpack
Sep 06 Python
Python编写检测数据库SA用户的方法
Jul 11 Python
编写Python脚本来获取Google搜索结果的示例
May 04 Python
python安装与使用redis的方法
Apr 19 Python
浅谈django model的get和filter方法的区别(必看篇)
May 23 Python
用Python将mysql数据导出成json的方法
Aug 21 Python
Python中按键来获取指定的值
Mar 02 Python
python异步编程 使用yield from过程解析
Sep 25 Python
python脚本和网页有何区别
Jul 02 Python
python爬虫用mongodb的理由
Jul 28 Python
django教程如何自学
Jul 31 Python
python爬虫构建代理ip池抓取数据库的示例代码
Sep 22 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判断字符以及字符串的包含方法属性
2008/08/30 PHP
WordPress判断用户是否登录的代码
2011/03/17 PHP
PHP支持多种格式图片上传(支持jpg、png、gif)
2011/11/03 PHP
php按百分比生成缩略图的代码分享
2014/05/10 PHP
PHP微信开发之有道翻译
2016/06/23 PHP
PHP实现对二维数组某个键排序的方法
2016/09/14 PHP
PHP微信红包生成代码分享
2016/10/06 PHP
PHP基于redis计数器类定义与用法示例
2018/02/08 PHP
javascript 动态添加事件代码
2008/11/30 Javascript
jquery 新手学习常见问题解决方法
2010/04/18 Javascript
jQuery.Validate验证库的使用介绍
2013/04/26 Javascript
JS图像无缝滚动脚本非常好用
2014/02/10 Javascript
js点击文本框后才加载验证码实例代码
2015/10/20 Javascript
JS实现网页标题栏显示当前时间和日期的完整代码
2015/11/02 Javascript
javascript动态添加checkbox复选框的方法
2015/12/23 Javascript
Node.js开发教程之基于OnceIO框架实现文件上传和验证功能
2016/11/30 Javascript
Bootstrap基本插件学习笔记之折叠(22)
2016/12/08 Javascript
jQuery动态生成表格及右键菜单功能示例
2017/01/13 Javascript
jq给页面添加覆盖层遮罩的实例
2017/02/16 Javascript
全面解析jQuery中的$(window)与$(document)的用法区别
2017/08/15 jQuery
zTree 树插件实现全国五级地区点击后加载的示例
2018/02/05 Javascript
浅谈Koa2框架利用CORS完成跨域ajax请求
2018/03/06 Javascript
[06:15]2016国际邀请赛中国区预选赛单车采访:我顶WINGS
2016/06/27 DOTA
[01:06:59]完美世界DOTA2联赛PWL S2 Magma vs FTD 第一场 11.29
2020/12/02 DOTA
Python中使用md5sum检查目录中相同文件代码分享
2015/02/02 Python
python开发之IDEL(Python GUI)的使用方法图文详解
2015/11/12 Python
Python实现网站注册验证码生成类
2017/06/08 Python
一款纯css3实现的颜色渐变按钮的代码教程
2014/11/12 HTML / CSS
canvas之万花筒效果的简单实现(推荐)
2016/08/16 HTML / CSS
应届大专毕业生自我鉴定
2014/04/08 职场文书
校车安全责任书
2014/08/25 职场文书
校外活动方案
2014/08/28 职场文书
运动与健康自我评价
2015/03/09 职场文书
治庸问责工作总结
2015/08/11 职场文书
利用Python读取微信朋友圈的多种方法总结
2021/08/23 Python
Android Flutter实现图片滑动切换效果
2022/04/07 Java/Android