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

    迭代器:

    迭代器对象指的是即内置有__iter__又内置有__next__方法的对象
    
    

    l=[1,2,3] iter_l=l.__iter__()
    #得到迭代器对象,迭代器对象即有__iter__又有__next__,但是:迭代器.__iter__()得到的仍然是迭代器本身

    print(iter_l) print(iter_l.__next__()) #调用迭代器对象的__next__取值 print(iter_l.__next__()) print(iter_l.__next__()) print(iter_l.__next__())

    <list_iterator object at 0x005A3150>
    Traceback (most recent call last):
    1
    2
    3
    File "F:/back01/hansu.py", line 261, in <module>
    print(iter_l.__next__())
    StopIteration           #取完后,再取抛出异常

    
    

    dic={'a':1,'b':2,'c':3}
    iter_dic=dic.__iter__()
    while 1:
    try:
    k=next(iter_dic)
    print(k,dic[k])
    except StopIteration:
    break


    a 1
    b 2
    c 3

    #优点:
      - 提供一种统一的、不依赖于索引的迭代方式
      - 惰性计算,节省内存
    #缺点:
      - 无法获取长度(只有在next完毕才知道到底有几个值)
      - 一次性的,只能往后走,不能往前退

    生成器:
    还有yield的函数就是一个生成器
    def func():
        print('1')
        yield 1
        print('2')
        yield 2
    
    
    
    ret=func()
    print(ret)
    print(ret.__next__())  #等同迭代器的取值
    print(ret.__next__())

    <generator object func at 0x020E93C0>  #func()的执行结果就是创建了一个生成器对象,或者迭代器对象
    1
    1
    2
    2

    def my_range(start,stop,step=1):
    while start < stop:
    yield start
    start+=step




    obj=my_range(1,7,2)
    # print(obj.__next__())
    # print(obj.__next__())
    # print(obj.__next__())
    # print(obj.__next__())
    for i in obj:
    print(i)
  • 相关阅读:
    Mac下mysql出现错误:ERROR 1055 (42000)
    单表查询
    外键的变种 三种关系
    Java8中Lambda表达式详解
    Java中的比较器Comparable、Comparator
    Java创建线程的方法
    java日期格式化
    Docker容器如何修改hosts
    使用postman可以正常访问,但是在应用中返回415状态码
    使用tcpdump进行抓包
  • 原文地址:https://www.cnblogs.com/wuxi9864/p/9893812.html
Copyright © 2011-2022 走看看