python iter yield

>>> lst = range(2)
>>> it = iter(lst)
>>> it
<listiterator object at 0x00BB62F0>

使用迭代器的next()方法可以访问下一个元素:
1
2
    
>>> it.next()
0

如果是Python 2.6+,还有内建函数next(iterator)可以完成这一功能:
1
2

>>> next(it)
1

不像一般的函数会生成值后退出,生成器函数在生成值后会自动挂起并暂停他们的执行和状态,他的本地变量将保存状态信息,这些信息在函数恢复时将再度有效

现在,我们来揭晓yield的工作原理。我们知道,我们上面的h()被调用后并没有执行,因为它有yield表达式,因此,我们通过next()语句让它执行。next()语句将恢复Generator执行,并直到下一个yield表达式处。比如:
def h():
    print ‘Wen Chuan‘
    yield 5
    print ‘Fighting!‘

c = h()
c.next()

def h():
    print ‘Wen Chuan‘,
    m = yield 5  # Fighting!
    print m
    d = yield 12
    print ‘We are together!‘

c = h()
c.next()  #相当于c.send(None)
c.send(‘Fighting!‘)  #(yield 5)表达式被赋予了‘Fighting!‘

时间: 2024-10-11 10:35:55

python iter yield的相关文章

Python关键字yield的解释(stackoverflow)

3.1. 提问者的问题 Python关键字yield的作用是什么?用来干什么的? 比如,我正在试图理解下面的代码: def node._get_child_candidates(self, distance, min_dist, max_dist): if self._leftchild and distance - max_dist < self._median: yield self._leftchild if self._rightchild and distance + max_dist

python 之 yield表达式

如果在某个函数中包含了yield, 这意味着这个函数已经是一个Generator, 它的执行 会和其他普通的函数有很多不同. 比如: def   h(): print    'To   be  brave' yield   5 h() 可以看到,调用h()之后,print语句并没有执行, 这就是yield,  那么,如何让print语句执行呢? 这就是接下来要讨论的问题: yield 是一个表达式(expression) m  =  yield   5 表达式(yield 5)的返回值将赋值给m

[转]Python中yield的解释

转自: http://python.jobbole.com/83610/ 本文作者: 伯乐在线 - wklken .未经作者许可,禁止转载!欢迎加入伯乐在线 专栏作者. 翻译 来源于stackoverflow问答,原文链接 Here SN上面看到的,顺手翻译下,第一次翻译,好多地方翻的不是很好 :) 问题: 1 Python中yield关键字的作用是什么?它做了什么? 例如,我想理解以下代码 1 2 3 def node._get_child_candidates(self, distance,

Python iter() 函数

Python iter() 函数  Python 内置函数 描述 iter() 函数用来生成迭代器. 语法 以下是 iter() 方法的语法: iter(object[, sentinel]) 参数 object -- 支持迭代的集合对象. sentinel -- 如果传递了第二个参数,则参数 object 必须是一个可调用的对象(如,函数),此时,iter 创建了一个迭代器对象,每次调用这个迭代器对象的__next__()方法时,都会调用 object. 打开模式 返回值 迭代器对象. 实例

python中yield用法

在介绍yield前有必要先说明下Python中的迭代器(iterator)和生成器(constructor). 一.迭代器(iterator) 在Python中,for循环可以用于Python中的任何类型,包括列表.元祖等等,实际上,for循环可用于任何“可迭代对象”,这其实就是迭代器 迭代器是一个实现了迭代器协议的对象,Python中的迭代器协议就是有next方法的对象会前进到下一结果,而在一系列结果的末尾是,则会引发 StopIteration.任何这类的对象在Python中都可以用for循

Python iter方法使用说明

Python 3中关于iter(object[, sentinel)]方法有两个参数. 使用iter(object)这种形式比较常见. iter(object, sentinel)这种形式使用的比较少,Python的文档说明貌似也不容易理解. 故,在此举例说明一下此函数的用法. 1,iter(object) Python官方文档对于这种形式的解释很容易理解. 此时,object必须是集合对象,且支持迭代协议(iteration protocol)或者支持序列协议(sequence protoco

python下yield(生成器)

python下的协程: 1 #encoding=utf-8 2 """ 3 协程----微小的进程 4 yield生成器-----生成一个可迭代对象比如list, tuple,dir 5 1.包含yield的函数,则是一个可迭代对象(list, tuple等) 6 每次运行到yield即结束,并保留现场 7 2.生产者.消费者行为: 8 9 3.无需立即执行,需要时才执行 10 """ 11 12 a = [1, 2, 3, 4] 13 for

python之yield函数

yield的英文单词意思是生产,刚接触Python的时候感到非常困惑,一直没弄明白yield的用法. 只是粗略的知道yield可以用来为一个函数返回值塞数据,比如下面的例子: def addlist(alist): for i in alist: yield i + 1     取出alist的每一项,然后把i + 1塞进去.然后通过调用取出每一项: alist = [1, 2, 3, 4] for x in addlist(alist): print x,     这的确是yield应用的一个

python之yield与装饰器

防伪码:忘情公子著 python中的yield: 在之前发布的<python之列表解析与生成器>中我们有提到过,生成器所实现的是跟列表解析近似的效果,但是我们不能对生成器做一些属于列表解析的操作. 因为生成器本身就不是一个列表,它只是模拟了一个类似列表的行为,因此,施加在列表中的很多操作,对生成器而言是无效的. 由于生成器表达式并不会直接创建出序列形式的列表,因此不能对其进行索引.切片,不能执行任何常规的列表操作.比如:弹出元素(pop()).添加元素(append())等等.但是我们可以通过