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 相关文章推荐
在Linux上安装Python的Flask框架和创建第一个app实例的教程
Mar 30 Python
Python3写入文件常用方法实例分析
May 22 Python
Python实现学生成绩管理系统
Apr 05 Python
浅析PyTorch中nn.Linear的使用
Aug 18 Python
关于django 1.10 CSRF验证失败的解决方法
Aug 31 Python
基于Python获取城市近7天天气预报
Nov 26 Python
解决Python3下map函数的显示问题
Dec 04 Python
Python enumerate函数遍历数据对象组合过程解析
Dec 11 Python
Keras - GPU ID 和显存占用设定步骤
Jun 22 Python
Pandas的Apply函数具体使用
Jul 21 Python
pandas取dataframe特定行列的实现方法
May 24 Python
教你怎么用python实现字符串转日期
May 24 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循环函数使用介绍之PHP基础入门教程
2013/09/21 PHP
php微信公众开发之获取周边酒店信息的方法
2014/12/22 PHP
php实现用手机关闭计算机(电脑)的方法
2015/04/22 PHP
php递归函数三种实现方法及如何实现数字累加
2015/08/07 PHP
PHP简单实现DES加密解密的方法
2016/07/12 PHP
利用Laravel事件系统如何实现登录日志的记录详解
2017/05/20 PHP
PHP微信支付结果通知与回调策略分析
2019/01/10 PHP
PHP 与 js的通信(via ajax,json)
2010/11/16 Javascript
Javascript绝句欣赏 一些经典的js代码
2012/02/22 Javascript
THREE.JS入门教程(4)创建粒子系统
2013/01/24 Javascript
node.js中的path.extname方法使用说明
2014/12/09 Javascript
node.js中的fs.rename方法使用说明
2014/12/16 Javascript
jQuery实用技巧必备(下)
2015/11/03 Javascript
JavaScript常用基础知识强化学习
2015/12/09 Javascript
js运动事件函数详解
2016/10/21 Javascript
原生js实现电商侧边导航效果
2017/01/19 Javascript
axios向后台传递数组作为参数的方法
2018/08/11 Javascript
Vue实现本地购物车功能
2018/12/05 Javascript
深入解析Python中的WSGI接口
2015/05/11 Python
Python与Java间Socket通信实例代码
2017/03/06 Python
浅谈Python基础之I/O模型
2017/05/11 Python
你眼中的Python大牛 应该都有这份书单
2017/10/31 Python
python 多线程重启方法
2019/02/18 Python
Python使用matplotlib 画矩形的三种方式分析
2019/10/31 Python
python实发邮件实例详解
2019/11/11 Python
django 解决model中类写不到数据库中,数据库无此字段的问题
2020/05/20 Python
使用python-cv2实现Harr+Adaboost人脸识别的示例
2020/10/27 Python
python两种获取剪贴板内容的方法
2020/11/06 Python
欢迎领导检查标语
2014/06/27 职场文书
入学证明
2015/06/23 职场文书
nginx 反向代理之 proxy_pass的实现
2021/03/31 Servers
详解PHP Swoole与TCP三次握手
2021/05/27 PHP
Java 实战项目之家居购物商城系统详解流程
2021/11/11 Java/Android
利用uni-app生成微信小程序的踩坑记录
2022/04/05 Javascript
Golang 字符串的常见操作
2022/04/19 Golang