zoukankan      html  css  js  c++  java
  • 迭代器&可迭代对象

    迭代器

    能够被next调用, 并不断返回值的一个对象
    惰性排序, 一次只获取一个数据, (占用一个空间)
    迭代器可以遍历无限量的数据

    特点:

    1.惰性序列, 节省内存

    2.遍历使用next, 方向不可逆

    3.迭代器可以遍历无限量大的数据

    1. 可迭代对象

     1 # 判断是不是可迭代对象   
     2 # 使用dir(obj) 看是否实现__iter__
     3 setvar = {1, 2, 4, 5}
     4 print('__iter__' in dir(setvar))
     5 
     6 
     7 """
     8 把可迭代对象变成迭代器:
     9     iter(obj)   
    10     obj.__iter__()
    11 
    12 迭代器调用的时候:
    13     obj.__next__()  
    14     next(obj)
    15 """
    16 # 方法一
    17 iter1 = setvar.__iter__()
    18 # 方法二
    19 iter2 = iter(setvar)
    20 
    21 
    22 # 调用的时候
    23 iter1.__next__()
    24 iter1.__next__()
    25 iter1.__next__()
    26 # next(iter1)   超出元素范围, 会报错

    关于for循环:

    1 for i in setvar:
    2     print(i)
    3     
    4 # for 循环会把迭代对象变成迭代器, 然后调用next()

    2.迭代器

     1 # 判断是不是迭代器  
     2 
     3 # 1.使用dir(obj)  有没有__next__
     4 print('__next__' in dir(iter1))
     5 
     6 # 2.使用isinstance
     7 from collections import Iterable, Iterator
     8 print(isinstance(iter1, Iterable))
     9 print(isinstance(iter1, Iterator))
    10 
    11 
    12 
    13 # 判断range的迭代属性
    14 print(isinstance(range(5), Iterable))
    15 print(isinstance(range(5), Iterator))
    16 
    17 
    18 # 吧range变成迭代器
    19 res = range(5).__iter__()
    20 print(isinstance(res, Iterator))
  • 相关阅读:
    extgcd 扩展欧几里得算法模板
    51nod 1073约瑟夫环
    UVA 11806 Cheerleaders (容斥原理
    HDU 1863 畅通工程 (最小生成树
    并查集模板
    51NOD 1072 威佐夫游戏
    Java基于JAX-RD开发Restful接口
    tomcat的webapps下放置多个项目时会出现很多exception
    带滚动条的表格
    禁止apache显示目录索引的常见方法
  • 原文地址:https://www.cnblogs.com/caihuajiaoshou/p/10611924.html
Copyright © 2011-2022 走看看