迭代器
--------------------------------------------------------------------------------
充电小知识
1.yield--->自定义函数中只要出现y写了点就说明函数已经是一个Generator。
yield--->m=yield 5 131 可作为表达式进行赋值,此刻m的值是131,5是def定义的函数返回的值
yield--->next() 函数被调用后必须经过.__next__()方法执行,直到返回值StopIteration停止
2.send()与next()
send()与next()作用基本相同,但是send(*)可以产地yield的表达式值进入,而next()不能传递特定的值,只能传递None进去
友情提醒:第一次调用时,请使用next()语句或是send(None),不能使用send发送一个非None的值,否则会出错的,因为没有yield语句来接收这个值
3.三元表达式----
def f()
return "+" if n>0 else "-" 理解 满足if return 否则 “-”
1 sum(x ** 2 for x in xrange(4)) 实现 【1,2,3】 平方累加
--------------------------------------------------------------------------------
1.迭代器协议
迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代 (只能往后走不能往前退)
2.python‘中 for循环机制
1.首先通过调用.__iter__()方法把他们变成可迭代对象
2.之后for循环调用了__next__方法进行取值
3.for循环会捕捉StopIteration异常,以终止迭代
3.牛逼的生成器
1.生成器的概念:自动实现了迭代器协议(其他的数据类型需要调用自己内置的__iter__方法),所以生成器就是可迭代对象
1.1提供生成器的方法:
1.生成器函数--自定义函数,使用yield语句返回结果,yield语句一次返回一个结果,在每个结果中间,挂起函数的状态,以便下次重它离开的地方继续执行
2.生成器表达式--似于列表推导,但是,生成器返回按需产生结果的一个对象,而不是一次构建一个结果列表
2.生成器函数
def f():
yield ------默认就是
优点:生成器使用yield语句返回一个值。yield语句挂起该生成器函数的状态,保留足够的信息,以便之后从它离开的地方继续执行
优点一:生成器的好处是延迟计算,一次返回一个结果。也就是说,它不会一次生成所有的结果,这对于大数据量处理,将会非常有用。
优点二:生成器还能有效提高代码可读性
注意事项:生成器只能遍历一次(母鸡一生只能下一定数量的蛋,下完了就死掉了)
原文地址:http://www.cnblogs.com/honglingjin/p/6139541.html