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
    
    
    
        
    

      

  • 相关阅读:
    [buuctf] pwn-第五空间2019pwn
    [buuctf] pwn-[OGeek2019]babyrop
    [buuctf] pwn-ciscn_2019_c_1
    [buuctf] pwn-jarvisoj_level0
    wamp集成环境配置php7.x连接mssql
    EXCEL小技巧之单击单元格实现自增
    Asuhe博客转移
    数据链路层中的最小帧长是如何计算出来的?
    CSMA/CD协议中如何确定数据重传时机?
    Cache设计
  • 原文地址:https://www.cnblogs.com/lich1x/p/10023387.html
Copyright © 2011-2022 走看看