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的Flask框架中使用模版的入门教程
Apr 20 Python
python 调用HBase的简单实例
Dec 18 Python
Python使用django框架实现多人在线匿名聊天的小程序
Nov 29 Python
python3大文件解压和基本操作
Dec 15 Python
Python功能点实现:函数级/代码块级计时器
Jan 02 Python
python实现的config文件读写功能示例
Sep 24 Python
Python Print实现在输出中插入变量的例子
Dec 25 Python
Python中如何将一个类方法变为多个方法
Dec 30 Python
python 异步async库的使用说明
May 04 Python
Django微信小程序后台开发教程的实现
Jun 03 Python
详解用python -m http.server搭一个简易的本地局域网
Sep 24 Python
Python内置数据结构列表与元组示例详解
Aug 04 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 连接mssql数据库 初学php笔记
2010/03/01 PHP
php使用pear_smtp发送邮件
2016/04/15 PHP
PHP实现的限制IP投票程序IP来源分析
2016/05/04 PHP
Laravel重定向,a链接跳转,控制器跳转示例
2019/10/22 PHP
jquery $.each 和for怎么跳出循环终止本次循环
2013/09/27 Javascript
javascript对象的使用和属性操作示例详解
2014/03/02 Javascript
js点击事件链接的问题解决
2014/04/25 Javascript
node.js中的fs.link方法使用说明
2014/12/15 Javascript
深入剖析JavaScript编程中的对象概念
2015/10/21 Javascript
javascript中Date format(js日期格式化)方法小结
2015/12/17 Javascript
BOM系列第三篇之定时器应用(时钟、倒计时、秒表和闹钟)
2016/08/17 Javascript
a标签置灰不可点击的实现方法
2017/02/06 Javascript
jQuery实现侧边栏隐藏与显示的方法详解
2018/12/22 jQuery
发布一款npm包帮助理解npm的使用
2019/01/03 Javascript
vue+element tabs选项卡分页效果
2020/06/29 Javascript
微信小程序 wx:for 与 wx:for-items 与 wx:key的正确用法
2020/05/19 Javascript
python中管道用法入门实例
2015/06/04 Python
Python实现批量压缩图片
2018/01/25 Python
python和shell获取文本内容的方法
2018/06/05 Python
pygame游戏之旅 调用按钮实现游戏开始功能
2018/11/21 Python
linux安装python修改默认python版本方法
2019/03/31 Python
Django中使用 Closure Table 储存无限分级数据
2019/06/06 Python
python绘制双Y轴折线图以及单Y轴双变量柱状图的实例
2019/07/08 Python
Python 获取项目根路径的代码
2019/09/27 Python
Python3+Requests+Excel完整接口自动化测试框架的实现
2019/10/11 Python
python实现猜数游戏
2020/03/27 Python
Python 开发工具通过 agent 代理使用的方法
2020/09/27 Python
Python抖音快手代码舞(字符舞)的实现方法
2021/02/07 Python
Berghaus官网:户外服装和设备,防水服
2020/01/17 全球购物
架构师岗位职责
2013/11/18 职场文书
七一表彰活动方案
2014/01/18 职场文书
小学生自我评价范文
2014/01/25 职场文书
动物科学专业求职信
2014/07/27 职场文书
2014国庆节标语口号
2014/09/19 职场文书
详解JVM系列之内存模型
2021/06/10 Javascript
Java获取e.printStackTrace()打印的信息方式
2021/08/07 Java/Android