Python生成器
来源:互联网 发布:sql case语句用法实例 编辑:程序博客网 时间:2024/05/23 01:15
生成器是一个包含yield关键字的函数,当yield在函数定义中出现时,函数体中的代码分段执行,每两个yield(除了程序一开始执行的时候只有一个标志程序暂停的yield)之间的程序就是一次执行结果。类似于return,但是和return不同的是,yield返回一个迭代器,而return则意味着停止执行。
我的理解是yield相当于整个程序在每次输出时的断点位置,且标志着断点位置,在程序后续执行时起到程序执行的起点位置的作用。下面先介绍一下Python的几个生成器方法:
a、next()用于依次输出yield之前的内容;
b、send()触发程序执行,输出断点间内容,向断点处输入信息;
c、throw()、close()中断Generator,再次调用next()或者send()会抛出异常。
下面是具体用法及注意事项:
(1)也许是因为Python版本的不同,本例使用的是2.7.10版本,在Python的py文件中使用yield和在IDL中使用结果略微不同,仅仅是yield内容是否输出的差别。在py文件中需要将next()赋值给变量,然后print变量才能输出yield内容,而IDL则是直接输出结果。
在py文件中:
def f(): print 'hello world' yield 'ok'c = f()m = c.next()print m
如果添加print语句,则仅仅输出hello world,添加后换行后输出ok,即next()仅仅输出yield前的程序输出结果,而将yield的返回值赋给了m。
在IDL中:
>>> def f(): print 'hello world' yield 'ok'>>> c = f()>>> c.next()hello world'ok'
(2)send()给断点位置添加新的信息,需要在定义函数中的yield后添加print信息才能输出函数外添加的信息
def f(): print 'hello world' a = yield 'ok' print a print 'hello python' yield 'right'c = f()m = c.next()c.send('information')
输出结果是:
>>> hello worldinformationhello python>>>
(3)throw()、close()的中断Generator
def g(): yield 1 yield 2 yield 3c = g()m = c.next()print mn = c.next()print nc.close()b = c.next()print b
输出结果是:
>>> 12Traceback (most recent call last): File "F:\Python\Pythonpro\yield_test.py", line 66, in <module> b = c.next()StopIteration
由于程序中断,程序不再继续执行,抛出异常。
- Python 生成器
- Python生成器
- python生成器
- python 生成器
- python生成器
- python生成器
- python生成器
- python生成器
- python 生成器
- python生成器
- python 生成器
- python生成器
- python 生成器
- Python--生成器
- python 生成器
- Python 生成器
- python-生成器
- Python生成器
- 说说JSON和JSONP,原来ajax引用这个来实现跨域访问的
- 亿科运维平台介绍
- binlog日志中没有insert的记录
- leetcode 22. Generate Parentheses
- 把一个数组分成四份,三个分割点不算进求和中,使得每份的和要相同。
- Python生成器
- simple udp
- bugzilla 系列1安装
- CSS伪类和伪元素
- Spring常用知识点速记
- java中定时器几种实现方式
- To do list
- 什么是有穷状态机
- HBase应用程序开发02插入数据