python的yield使用
来源:互联网 发布:虚拟货币源码 编辑:程序博客网 时间:2024/05/22 18:24
在python中,yield被称之为generator(生成器)。
下面举个小例子来理解,yield在程序是怎么执行的
代码:
def func(): print "begin" yield 1 print "mid" yield 2 print "end" f = func()f.next() //1f.next() //2f.next() //3
f获得的是一个生成器(generator),next()每次都获取生成器中的下一个值。1的next会从函数的起始部分执行到第一个yield,也就是执行print “begin”和yield 1。所以语句1执行完输出begin,2执行完输出mid,3执行完输出end,并且会报错,报错是因为后面没有yield的了,当函数执行结束时,generator自动抛出StopIteration异常,表示迭代完成。在for循环里,无需处理StopIteration异常,循环会正常结束。
--------斐波那契数列------
知道了生成器的一些概念后,下面来看另一个例子
对于斐波那契数列,我们很容易想到下面的实现形式:
# coding=utf-8 def fab(n): index, a, b = 0, 0, 1 res = [] while index < n: res.append(b) a, b = b, a + b index = index + 1 return res for n infab(5): print n
使用yield的话,可以改写成如下形式:
# coding=utf-8 def fab(n): index, a, b = 0, 0, 1 while index < n: # res.append(b) yieldb a, b = b, a + b index = index + 1 for n infab(5): print n
打印结果同前面那个程序的,如下:
原理就是第一次执行是从开始到yield b,yield b会返回b这个值。然后从后面执行到第二个yield b,以此类推。
------判断是否是generatorfunction------
使用isgeneratorfunction()函数判断一个函数是否是生成器函数
>>>from inspect import isgeneratorfunction>>>isgeneratorfunction(fab)True >>>import types>>>isinstance(fab, types.GeneratorType)False>>>isinstance(fab(5), types.GeneratorType)True
区别fab和fab(5),fab是一个generatorfunction,而fab(5)是调用fab返回的一个generator
阅读全文
0 0
- python的yield使用
- python的yield使用
- Python生成器:yield的使用
- python中yield的使用
- python的yield使用初探
- python协程:yield的使用
- Python--yield关键字的使用
- python yield from的使用
- 【Python】【yield】生成器的使用
- python中yield的使用
- Python中yield的使用小述
- Python中的yield是如何使用的
- python yield(生成器)的简单使用
- Python yield 使用浅析
- Python yield 使用浅析
- Python yield 使用浅析
- Python yield 使用浅析
- Python yield 使用浅析
- 对10个整数按由大到小排序
- priority_queue优先队列
- 设计模式:javascript原型式继承
- jQuery Mobile事件,开发全解+完美注释
- 博弈
- python的yield使用
- 杭电 OJ 最简单的计算机
- tf.nn.embedding_lookup TensorFlow embedding_lookup 函数最简单实例
- MySQL5.6新特性之crash-safe
- CSS 布局经典问题初步整理
- 常见文件系统解析
- Unity透明视频播放 所需的Shader脚本
- php 封装接口类返回json/xml数据
- js的数据类型