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 基础学习教程
Feb 08 Python
Python的组合模式与责任链模式编程示例
Feb 02 Python
Python字符串格式化输出方法分析
Apr 13 Python
django实现用户登陆功能详解
Dec 11 Python
DataFrame中的object转换成float的方法
Apr 10 Python
python贪婪匹配以及多行匹配的实例讲解
Apr 19 Python
总结python中pass的作用
Feb 27 Python
PyQT5 QTableView显示绑定数据的实例详解
Jun 25 Python
PyQt5+Caffe+Opencv搭建人脸识别登录界面
Aug 28 Python
python实现的多任务版udp聊天器功能案例
Nov 13 Python
win10下python3.8的PIL库安装过程
Jun 08 Python
Python如何输出百分比
Jul 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
PHP开发大型项目的一点经验
2006/10/09 PHP
PHP中实现生成静态文件的方法缓解服务器压力
2014/01/07 PHP
两个php日期控制类实例
2014/12/09 PHP
php mysql 封装类实例代码
2016/09/18 PHP
PHP错误处理函数register_shutdown_function使用示例
2017/07/03 PHP
php格式文件打开的四种方法
2018/02/24 PHP
PHP Ajax跨域问题解决方案代码实例
2020/08/01 PHP
显示今天的日期js代码(阳历和农历)
2014/09/30 Javascript
为什么Node.js会这么火呢?Node.js流行的原因
2014/12/01 Javascript
javascript实现随机读取数组的方法
2015/08/03 Javascript
js倒计时简单实现方法
2015/12/17 Javascript
基于JavaScript实现动态添加删除表格的行
2016/02/01 Javascript
select自定义小三角样式代码(实用总结)
2017/08/18 Javascript
利用jQuery+localStorage实现一个简易的计时器示例代码
2017/12/25 jQuery
Vue-cli@3.0 插件系统简析
2018/09/05 Javascript
React如何解决fetch跨域请求时session失效问题
2018/11/02 Javascript
JavaScript数据结构与算法之二叉树遍历算法详解【先序、中序、后序】
2019/02/21 Javascript
python文件和目录操作方法大全(含实例)
2014/03/12 Python
python数据结构之二叉树的遍历实例
2014/04/29 Python
Python的Django REST框架中的序列化及请求和返回
2016/04/11 Python
Python编程实现控制cmd命令行显示颜色的方法示例
2017/08/14 Python
Python 实现使用dict 创建二维数据、DataFrame
2018/04/13 Python
对dataframe进行列相加,行相加的实例
2018/06/08 Python
基于wxPython的GUI实现输入对话框(2)
2019/02/27 Python
很酷的python表白工具 你喜欢我吗
2019/04/11 Python
python实现随机漫步方法和原理
2019/06/10 Python
python如何实现异步调用函数执行
2019/07/08 Python
keras 特征图可视化实例(中间层)
2020/01/24 Python
python 画条形图(柱状图)实例
2020/04/24 Python
Kent & Curwen:与大卫·贝克汉姆合作
2017/06/13 全球购物
汽车工程专业应届生求职信
2013/10/19 职场文书
三年级音乐教学反思
2014/01/28 职场文书
勇敢的心观后感
2015/06/09 职场文书
HTML+JS实现在线朗读器
2022/02/15 Javascript
SQL SERVER存储过程用法详解
2022/02/24 SQL Server
动画「半妖的夜叉姬」新BD特典图公开
2022/03/22 日漫