python高级特性-迭代器

  1. 迭代

    可以直接作用于for循环的对象,称为可迭代对象Iterable:
    1.集合数据类型:list,tuple,set,dict,str
    2.generator:包括生成器和带yield的generator funcion

    1. list迭代

      1
      2
      3
         list = [1,2,3,4,5]
      for a in list:print(a,end=' ')
      print()
    2. dict迭代

      1
      2
      3
      4
      5
      d = {'a': 1, 'b': 2, 'c': 3}
      for key in d:print(key,end=' ')
      print()
      for value in d.values():print(value,end=' ')
      print()
    3. 字符串迭代

      1
      2
         for a in 'afsf':print(a,end=' ')
      print()
    4. 判断是否可以迭代

      1
      2
         from collections import Iterable
      print(isinstance(list,Iterable))
    5. list变成索引-元素对的例子

      1
      2
      for i,value in enumerate(['a','b','c']):
      print(i,value)
  2. 迭代器

    可以被next()不断调用并返回下一个值的对象称为Iterator
    集合数据类型list,tuple,set,dict,str都是,Iterable,但都不是Iterator\
    for循环内部实际上就是先调用iter()把Iterable转为Iterator再进行循环迭代的

    1. 迭代器判断

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      from collections import Iterator
      print(isinstance((),Iterator))
      print(isinstance({},Iterator))
      print(isinstance([],Iterator))
      print(isinstance('fsaf',Iterator))
      #使用iter()函数变成Iterator
      from collections import Iterator
      print(isinstance(iter(()),Iterator))
      print(isinstance(iter({}),Iterator))
      print(isinstance(iter([]),Iterator))
      print(isinstance(iter('fsaf'),Iterator))
    2. 为什么list不是Iterator

      Iterator表示一个数据流,我们可以知道它的长度,通过next()来计算下一个数据,可以是无限长的
      Iterator是一个惰性序列,它的计算是惰性的,需要返回下一个数据时才会去计算
      而集合数据类型是无法达到这样的功能的