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实现探测socket和web服务示例
Mar 28 Python
python根据时间生成mongodb的ObjectId的方法
Mar 13 Python
深入理解python try异常处理机制
Jun 01 Python
python实现redis三种cas事务操作
Dec 19 Python
Python中print函数简单使用总结
Aug 05 Python
Python利用WMI实现ping命令的例子
Aug 14 Python
Python 识别12306图片验证码物品的实现示例
Jan 20 Python
python3 字符串知识点学习笔记
Feb 08 Python
Python基于smtplib模块发送邮件代码实例
May 29 Python
python中remove函数的踩坑记录
Jan 04 Python
pycharm最新激活码有效期至2100年(亲测可用)
Feb 05 Python
Pandas实现DataFrame的简单运算、统计与排序
Mar 31 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
怎样辨别一杯好咖啡
2021/03/03 新手入门
我用php+mysql写的留言本
2006/10/09 PHP
PHP图片验证码制作实现分享(全)
2012/05/10 PHP
PHP高级编程实例:编写守护进程
2014/09/02 PHP
ecshop 2.72如何修改后台访问地址
2015/03/03 PHP
PHP实现CSV文件的导入和导出类
2015/03/24 PHP
PHP中preg_match正则匹配中的/u、/i、/s含义
2015/04/17 PHP
PHP 芝麻信用接入的注意事项
2016/12/01 PHP
php删除数组指定元素实现代码
2017/05/03 PHP
javascript 表格排序和表头浮动效果(扩展SortTable)
2009/04/07 Javascript
基于jquery的一个图片hover的插件
2010/04/24 Javascript
ie下jquery.getJSON的缓存问题的处理方法
2013/03/29 Javascript
js 距离某一时间点时间是多少实现代码
2013/10/14 Javascript
Javascript连接多个数组不用concat来解决
2014/03/24 Javascript
JS建造者模式基本用法实例分析
2015/06/30 Javascript
微信小程序 免费SSL证书https、TLS版本问题的解决办法
2016/12/14 Javascript
js仿小米手机上下滑动效果
2017/02/05 Javascript
jQuery倒计时代码(超简单)
2017/02/27 Javascript
Nuxt.js实战详解
2018/01/18 Javascript
vue2.0实现移动端的输入框实时检索更新列表功能
2018/05/08 Javascript
JavaScript反射与依赖注入实例详解
2018/05/29 Javascript
Vue.js结合bootstrap前端实现分页和排序效果
2018/12/29 Javascript
python基础教程之常用运算符
2014/08/29 Python
Python爬取当当、京东、亚马逊图书信息代码实例
2017/12/09 Python
python脚本作为Windows服务启动代码详解
2018/02/11 Python
python笔记之mean()函数实现求取均值的功能代码
2019/07/05 Python
Python数据可视化处理库PyEcharts柱状图,饼图,线性图,词云图常用实例详解
2020/02/10 Python
python实现启动一个外部程序,并且不阻塞当前进程
2020/12/05 Python
详解如何将 Canvas 绘制过程转为视频
2021/01/25 HTML / CSS
Unix如何在一行中运行多个命令
2015/05/29 面试题
八年级生物教学反思
2014/01/22 职场文书
汽车销售员如何做职业生涯规划
2014/02/16 职场文书
学生保证书格式
2015/02/27 职场文书
2015年“七七卢沟桥事变”纪念活动总结
2015/03/24 职场文书
导游词之山东红叶谷
2019/10/31 职场文书
Oracle 数据仓库ETL技术之多表插入语句的示例详解
2021/04/12 Oracle