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 切片和range()用法说明
Mar 24 Python
Python yield使用方法示例
Dec 04 Python
python使用cStringIO实现临时内存文件访问的方法
Mar 26 Python
python使用super()出现错误解决办法
Aug 14 Python
Python输入二维数组方法
Apr 13 Python
浅析python中while循环和for循环
Nov 19 Python
python实现从wind导入数据
Dec 03 Python
关于tf.nn.dynamic_rnn返回值详解
Jan 20 Python
python字符串替换re.sub()实例解析
Feb 09 Python
Python3安装模块报错Microsoft Visual C++ 14.0 is required的解决方法
Jul 28 Python
python 利用matplotlib在3D空间中绘制平面的案例
Feb 06 Python
pytorch fine-tune 预训练的模型操作
Jun 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
php字符串过滤与替换小结
2015/01/26 PHP
100多行PHP代码实现socks5代理服务器[2]
2016/05/05 PHP
php生成毫秒时间戳的实例讲解
2017/09/22 PHP
图片在浏览器中底部对齐 解决方法之一
2011/11/30 Javascript
javascript中的作用域和上下文使用简要概述
2013/12/05 Javascript
js 获取、清空input type=&quot;file&quot;的值(示例代码)
2013/12/24 Javascript
jquery获取tr并更改tr内容示例代码
2014/02/13 Javascript
javascript 操作符(~、&amp;、|、^、)使用案例
2014/12/31 Javascript
JavaScript获取DOM元素的11种方法总结
2015/04/25 Javascript
jQuery使用$获取对象后检查该对象是否存在的实现方法
2016/09/04 Javascript
JS中showModalDialog关闭子窗口刷新主窗口用法详解
2017/03/25 Javascript
js异步编程小技巧详解
2017/08/14 Javascript
微信小程序button组件使用详解
2018/01/31 Javascript
jQuery实现input输入框获取焦点与失去焦点时提示的消失与显示功能示例
2019/05/27 jQuery
解决vue中el-tab-pane切换的问题
2020/07/19 Javascript
vue 遮罩层阻止默认滚动事件操作
2020/07/28 Javascript
[02:15]2014DOTA2国际邀请赛 专访LGD.lin小兔子是大腿
2014/07/14 DOTA
Python实现的简单dns查询功能示例
2017/05/24 Python
使用pandas的DataFrame的plot方法绘制图像的实例
2018/05/24 Python
Python运维之获取系统CPU信息的实现方法
2018/06/11 Python
python数据预处理之数据标准化的几种处理方式
2019/07/17 Python
Python学习笔记之函数的定义和作用域实例详解
2019/08/13 Python
sklearn-SVC实现与类参数详解
2019/12/10 Python
Python3 shutil(高级文件操作模块)实例用法总结
2020/02/19 Python
canvas实现俄罗斯方块的方法示例
2018/12/13 HTML / CSS
socket.io 和canvas 实现的共享画板功能
2019/05/22 HTML / CSS
swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
2013/03/30 面试题
外语系毕业生找工作的求职信
2013/11/28 职场文书
电气工程自动化求职信
2014/03/14 职场文书
党支部公开承诺书
2014/03/28 职场文书
担保书怎么写
2014/04/01 职场文书
2014年生产管理工作总结
2014/12/23 职场文书
治理商业贿赂工作总结
2015/08/10 职场文书
新入职员工工作总结
2015/10/15 职场文书
纯CSS如何禁止用户复制网页的内容
2021/11/01 HTML / CSS
win10蓝屏0xc0000001安全模式进不了怎么办?win10出现0xc0000001的解决方法
2022/08/05 数码科技