zoukankan      html  css  js  c++  java
  • 迭代器与生成器

    迭代器

    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:{键:值 for循环 条件}
      • set:{变量 for循环 条件}
    • 生成器表达式
      • -把列表推导式的 [ ] 换成 ( ) 就是生成器表达式
    • 两者比较
      • -列表推导式比较耗内存,所有数据一次性加载
      • 生成器表达式遵循迭代器协议,逐个产生元素
      • 得到的值不一样,列表推导式的得到是一个列表
      • 生成器表达式得到的是一个生成器
      • 列表推导式一目了然,生成器表达式只是一个内存地址
    希望你眼眸有星辰,心中有山海,从此以梦为马,不负韶华
  • 相关阅读:
    C++ 根据对象名字创建对象
    Google是如何测试的(一)
    lex yacc 学习
    C语言宏定义时#(井号)和##(双井号)的用法
    更多编译器对C++11的支持比较
    用C++11替代Boost的实验之三
    最先进的开源游戏引擎KlayGE 4.2发布
    各编译器对C++11的支持比较
    在Android模拟器上的一些小陷阱
    推出KlayGE Foundation Library
  • 原文地址:https://www.cnblogs.com/daviddd/p/12033560.html
Copyright © 2011-2022 走看看