冬西

导航

7,迭代器和生成器

列表生成式:

[i for i in range(10)]这就就做列表生成式,等于[0,1,2,3,4,5,6,7,8,9]

生成器:

通过某种算法,我用得上一个列表中的元素,你给我生成一个,而不要我取创建一个完整的列表,这样保存算法的方式就叫做列表生成器

  创建生成器:

  将列表生成式的[]改成(),g = (i for i in range(10))这就叫做生成器,生成器不能像列表一样用下标调用

  next(g)

  0

  next(g)

  1

  通过next(g)这样一个一个的调用是非常麻烦的,一般我们都用for循环

  g = (i for i in range(10))

  for n in g:

      print(n)

  如果生成器比较复杂,用for搞不定,那就用函数搞定它 

  def han(max):

  n = 0; a=0;b=0;

  while n < max:

      yield b

      a,b = b,a+b

      n = n + 1

  h = han(10)

  这是我们就得到一个函数形式的迭代器,调用时用 h.__next__()来依次调用,程序运行到yield时,会跳出到外面来,直到遇到h.__next__() 或者是 h.send(self)时才继续运行下一步

迭代器:

  可迭代对象:

  可以直接用for循环的对象,就叫做可迭代对象,包括 list tuple dic str set generator 

  判断是否是可迭代对象:isinstance()

  from collections import Iterable

  isinstance(这里放判断对象,Iterable)

  返回值为 True,Flase

  迭代器:

  可以被next()调用并不断返回下一个值的对象叫做迭代器

  from collections import Tterator

  isinstance(这里放判断对象,Iterator)

  返回值为 True,Flase

  generator是迭代器,但是 list dic tuple set str是可迭代对象,但是不是迭代器

  iter(可迭代对象) 这样就是迭代器

posted on 2018-06-12 09:58  冬西  阅读(89)  评论(0编辑  收藏  举报