首页 > 代码库 > python修炼7----迭代器

python修炼7----迭代器

 

迭代器

--------------------------------------------------------------------------------

充电小知识

 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语句挂起该生成器函数的状态,保留足够的信息,以便之后从它离开的地方继续执行

优点一:生成器的好处是延迟计算,一次返回一个结果。也就是说,它不会一次生成所有的结果,这对于大数据量处理,将会非常有用。

优点二:生成器还能有效提高代码可读性

注意事项:生成器只能遍历一次(母鸡一生只能下一定数量的蛋,下完了就死掉了)

  

    

   

 

python修炼7----迭代器