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的Django框架中使用通用视图的方法
Jul 21 Python
详解python的几种标准输出重定向方式
Aug 15 Python
使用python进行广告点击率的预测的实现
Jul 04 Python
python 字典套字典或列表的示例
Dec 16 Python
python 安装库几种方法之cmd,anaconda,pycharm详解
Apr 08 Python
windows下的pycharm安装及其设置中文菜单
Apr 23 Python
Python实现常见的几种加密算法(MD5,SHA-1,HMAC,DES/AES,RSA和ECC)
May 09 Python
keras实现VGG16方式(预测一张图片)
Jul 07 Python
python实现xlwt xlrd 指定条件给excel行添加颜色
Jul 14 Python
详解Django ORM引发的数据库N+1性能问题
Oct 12 Python
python制作抽奖程序代码详解
Jan 15 Python
python opencv通过按键采集图片源码
May 20 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安全配置详细说明
2011/09/26 PHP
详解PHP执行定时任务的实现思路
2015/12/21 PHP
激活 ActiveX 控件
2006/10/09 Javascript
用javascript控制iframe滚动的代码
2007/04/10 Javascript
Javascript学习笔记9 prototype封装继承
2010/01/11 Javascript
Javascript面象对象成员、共享成员变量实验
2010/11/19 Javascript
javascript实现数字验证码的简单实例
2014/02/10 Javascript
页面加载完毕后滚动条自动滚动一定位置
2014/02/20 Javascript
防止登录页面出现在frame中js代码
2014/07/22 Javascript
一个css与js结合的下拉菜单支持主流浏览器
2014/10/08 Javascript
node.js中的dns.getServers方法使用说明
2014/12/08 Javascript
javascript 事件处理示例分享
2014/12/31 Javascript
DOM基础教程之使用DOM控制表单
2015/01/20 Javascript
jQuery使用$.ajax进行即时验证的方法
2015/12/08 Javascript
JavaScript 过滤关键字
2017/03/20 Javascript
websocket+node.js实现实时聊天系统问题咨询
2017/05/17 Javascript
jQuery+Cookie实现切换皮肤功能【附源码下载】
2018/03/25 jQuery
vue使用Proxy实现双向绑定的方法示例
2019/03/20 Javascript
layui当点击文本框时弹出选择框,显示选择内容的例子
2019/09/02 Javascript
vue 输入电话号码自动按3-4-4分割功能的实现代码
2020/04/30 Javascript
jQuery实现飞机大战小游戏
2020/07/05 jQuery
[01:43]3.19DOTA2发布会 三代刀塔人第三代
2014/03/25 DOTA
linux系统使用python获取内存使用信息脚本分享
2014/01/15 Python
使用Python实现windows下的抓包与解析
2018/01/15 Python
Python字符串逆序的实现方法【一题多解】
2019/02/18 Python
Django的用户模块与权限系统的示例代码
2019/07/24 Python
python读取dicom图像示例(SimpleITK和dicom包实现)
2020/01/16 Python
关于canvas.toDataURL 在iOS运行失败的问题解决
2020/09/16 HTML / CSS
澳大利亚现代波西米亚风格女装网站:Bohemian Traders
2018/04/16 全球购物
Omio中国:全欧洲低价大巴、火车和航班搜索和比价
2018/08/09 全球购物
德国专业木制品经销商:Holz-Direkt24
2019/12/26 全球购物
优秀实习生感言
2014/03/01 职场文书
人事任命书格式
2014/06/05 职场文书
花坛标语大全
2014/06/30 职场文书
工商局领导班子存在的问题整改措施思想汇报
2014/10/05 职场文书
mysql联合索引的使用规则
2021/06/23 MySQL