迭代器与生成器

迭代器

1,可迭代对象

  • 在Python中,含有iter方法的对象,都是可迭代对象
  • str ,list,dict,set,tuple都是可迭代对象
  • 判断方法:print(dir(数据类型)),查看源码
  • 优点:,使用灵活,可以直观的查看里面的数据
  • 缺点:占用内存

2,迭代器

  • 可迭代对象执行obj.iter()得到的结果就是迭代器
    而迭代器对象指的是即内置有__iter__又内置有__next__方法的对象

  • 在Python中,内部含有iter方法并且含有next方法的对象就是迭代器

  • 迭代器:在可迭代对象中,只有文件句柄是迭代器

  • 可迭代对象转换为迭代器

    • str
      list
      ...        ###  .__iter__()  就是迭代器
      dict
      set
      
    • s = [1,2,3,4,5,6.]
      count = len(s)
      new_s = s.__iter__()
      while count:
          print(new_s.__next__())
          count -= 1
      
  • for i in 的方式

  • s = [1,3,4,5,6,2,7]
    new_s = s.__iter__()
    while True:
        try:
            pirnt(new_s.__next__())
        except StopIteration:
            break
    
  • 优点:节省内存,惰性机制

  • 缺点:不能直观的看到里面的数据,

递归

  • 不断调用自己本身
  • 有明确的终止条件

生成器

1,定义

  • 生成器的本质就是迭代器
  • 只要函数内部含有yield 关键字,那么函数名()得到的结果就是生成器,并且不会执行函数内部代码
  • 迭代器是Python解释器自带的,生成器是后期程序编写的
  • 生成器的特性
    • 节省内存,惰性机制
    • 一次性,不能逆行
    • 一个next对应一个yield
    • yield能够进行返回内容,还能返回多次
    • yield能够临时停止循环
    • yield能够记录执行 的位置
    • yield from ——将一个可迭代对象的元素逐个返回
  • 通过生成器函数构建生成器
  • 通过生成器推导式

2,推导式

  • 列表推导式的两种模式
    • -循环模式
    • 筛选模式
    • list:[变量 for 循环 条件]
    • dict:
    • set:
  • 生成器表达式
    • -把列表推导式的 [ ] 换成 ( ) 就是生成器表达式
  • 两者比较
    • -列表推导式比较耗内存,所有数据一次性加载
    • 生成器表达式遵循迭代器协议,逐个产生元素
    • 得到的值不一样,列表推导式的得到是一个列表
    • 生成器表达式得到的是一个生成器
    • 列表推导式一目了然,生成器表达式只是一个内存地址
posted @ 2019-12-13 10:03  阿浪阿浪  阅读(102)  评论(0编辑  收藏  举报