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 26 Python
python3抓取中文网页的方法
Jul 28 Python
Python学习笔记之解析json的方法分析
Apr 21 Python
Python用Pillow(PIL)进行简单的图像操作方法
Jul 07 Python
JSONLINT:python的json数据验证库实例解析
Nov 28 Python
python Matplotlib底图中鼠标滑过显示隐藏内容的实例代码
Jul 31 Python
python爬取Ajax动态加载网页过程解析
Sep 05 Python
Python使用matplotlib实现交换式图形显示功能示例
Sep 06 Python
Python3.8对可迭代解包的改进及用法详解
Oct 15 Python
浅谈python中统计计数的几种方法和Counter详解
Nov 07 Python
Python3 socket即时通讯脚本实现代码实例(threading多线程)
Jun 01 Python
python中not、and和or的优先级与详细用法介绍
Nov 03 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
laravel 解决groupBy时出现的错误 isn't in Group By问题
2019/10/17 PHP
客户端 使用XML DOM加载json数据的方法
2010/09/28 Javascript
javascript获取select的当前值示例代码(兼容IE/Firefox/Opera/Chrome)
2013/12/17 Javascript
IE下双击checkbox反应延迟问题的解决方法
2014/03/27 Javascript
jQuery蓝色风格滑动导航栏代码分享
2015/08/19 Javascript
Ajax+FormData+javascript实现无刷新表单信息提交
2016/10/24 Javascript
使用ef6创建oracle数据库的实体模型遇到的问题及解决方案
2017/11/09 Javascript
mpvue+vant app搭建微信小程序的方法步骤
2019/02/11 Javascript
详解微信小程序获取当前时间及日期的方法
2019/04/28 Javascript
微信小程序实现判断是分享到群还是个人功能示例
2019/05/03 Javascript
微信小程序蓝牙连接小票打印机实例代码详解
2019/06/03 Javascript
vue回到顶部监听滚动事件详解
2019/08/02 Javascript
JS 实现发送短信验证码的“59秒后重新发送验证短信”功能
2019/08/23 Javascript
微信小程序自定义组件components(代码详解)
2019/10/21 Javascript
JS插入排序简单理解与实现方法分析
2019/11/25 Javascript
jquery实现直播弹幕效果
2019/11/28 jQuery
JavaScript回调函数callback用法解析
2020/01/14 Javascript
[02:40]DOTA2英雄基础教程 炼金术士
2013/12/23 DOTA
在Python中操作文件之seek()方法的使用教程
2015/05/24 Python
Python中字符串格式化str.format的详细介绍
2017/02/17 Python
python 通过logging写入日志到文件和控制台的实例
2018/04/28 Python
Numpy中矩阵matrix读取一列的方法及数组和矩阵的相互转换实例
2018/07/02 Python
Django 登陆验证码和中间件的实现
2018/08/17 Python
Python3.5常见内置方法参数用法实例详解
2019/04/29 Python
浅析Python与Mongodb数据库之间的操作方法
2019/07/01 Python
Python之指数与E记法的区别详解
2019/11/21 Python
Python2 与Python3的版本区别实例分析
2020/03/30 Python
django执行数据库查询之后实现返回的结果集转json
2020/03/31 Python
浅析python实现动态规划背包问题
2020/12/31 Python
预备党员思想汇报范文
2014/01/11 职场文书
物流专业专科生职业生涯规划书
2014/09/14 职场文书
迎国庆横幅标语
2014/10/08 职场文书
2015年手术室工作总结
2015/05/11 职场文书
穷人该怎么创业?谨记以下几点
2019/07/11 职场文书
自己搭建resnet18网络并加载torchvision自带权重的操作
2021/05/13 Python
ORACLE数据库应用开发的三十个注意事项
2021/06/07 Oracle