zoukankan      html  css  js  c++  java
  • 迭代器和生成器(python3入门)

    #可迭代的对象:但凡数据类型可以执行__iter__()
    # ''.__iter__()
    # [].__iter__()
    # (1,2).__iter__()
    # {'x':1}.__iter__()
    # {1,2,3}.__iter__()
    # open('a.txt').__iter__()
    
    #调用可迭代对象的__iter__()方法,会得到一个返回值,该返回值就是迭代器对象
    
    #迭代器对象:既内置有__iter__()方法,又内置又__next__()方法.例如:文件本身就是迭代器对象
    #迭代器总结:
    #优点:1,提供了一种不依赖索引的迭代器取值方式
    #       2,迭代器中不包含任何值,占用空间极小
    #缺点:1,一次性,只能取一个,依此往后,无法预测迭代器对象中值的个数
    #       2,无法取得指定的值,不如按索引/key 取值灵活
    
    例如:
    # dic = {'1':'aa','2':'bb','3':'cc'}
    # iter_dic = dic.values().__iter__()
    # print(iter_dic,type(iter_dic))
    #
    #
    #
    # try:
    #     print(iter_dic.__next__())
    #     print(iter_dic.__next__())
    #     print(iter_dic.__next__())
    #     print(iter_dic.__next__())
    # except:StopIteration
    
    # dic = {'1':'aa','2':'bb','3':'cc'}
    # iter_dic = iter(dic)
    # while 1:
    #     try:
    #         print(next(iter_dic))
    #     except StopIteration:break
    
    
    
    #生成器是一种自定义的迭代器
    #在函数中但凡出现yield关键字,然后调用函数不会立即执行函数体代码,会得到一个返回值,该返回值称之为生成器
    #即自定义的迭代器
    
    #总结
    #yield提供了一种迭代器的解决方案
    #yield对比return,相同点:都能返回值,并且返回值没有类型和个数限制
    #                        不同点:yield可以返回多次值,而return只能返回一次值
    
    
    def my_range(start,stop,step):
        while start < stop:
            yield start
            start += step
    
    res = my_range(1,10001,2)
    
    
    while 1:
        try:
            print(next(res))
        except StopIteration:break
    
    
    
        
    

      

  • 相关阅读:
    网站优化记录
    在pc游览器端模拟移动端幻灯片
    jquery消息提示框
    开发jquery tab 插件
    js检测是否安装了flash插件
    javaweb项目下解决360兼容模式不能下载文件问题
    简单的excel上传解析和错误反馈信息下载
    sqlserver带游标存储过程及调用函数
    oracle带游标存储过程编写
    简单的spring+dubbo提供和消费方
  • 原文地址:https://www.cnblogs.com/lich1x/p/10023387.html
Copyright © 2011-2022 走看看