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

    # ### 迭代器
    '''
    能够被next调用,并不断返回下一个值的对象,叫迭代器(迭代器是对象)
    特征:迭代器会生成惰性序列,它通过计算把值依次的返回,一边循环一边计算而不是一次性得到所有数据
    优点:需要数据的时候,一次取一个,可以大大节省内存空间.而不是一股脑的把所有数据放进内存.
    总结:
    	1.惰性序列,节省内存空间
    	2.遍历获取值得时候使用next,方向不可逆
    	3.迭代器可以遍历无限量大的数据
    '''
    # (1)可迭代性对象
    ''' __iter__ '''
    setvar = {"周杰伦",13,"aa",90}
    for i in setvar:
    	print(i)
    # dir 查看数据里面的内置属性或方法
    # print(dir(setvar))
    print("__iter__" in dir(setvar))
    # next(setvar)
    """
    for循环遍历setvar这个数据时,先把setvar变成迭代器,在进行取值
    """
    # (2)迭代器
    '''
    可迭代对象 -> 迭代器  | 不能直接调用 -> 可直接调用
    __iter__ __next__ 都包含在当前这个数据类型当中,就是迭代器
    如何变成一个迭代器?
    	(1)iter(可迭代型数据) (推荐)
    	(2)可迭代性数据.__iter__()
    	
    调用迭代器时:
    	(1)next 可以调用 (推荐)
    	(2)__next__() 也可以调用
    '''
    setvar = {"周杰伦",13,"aa",90}
    it1 = iter(setvar)
    print(it1)
    res = next(it1)
    print(res)
    res = next(it1)
    print(res)
    res = next(it1)
    print(res)
    res = it1.__next__()
    print(res)
    # 如果调用时,超出了正常的数据范围,会报越界错误.StopIteration
    # res = next(it1)
    # print(res)
    
    # 判断是否是迭代器
    listvar = dir(it1)
    print(listvar)
    print("__iter__" in listvar and "__next__" in listvar)
    
    
    # (3) 判断是否是迭代器或可迭代对象
    # from ... import  从哪个模块 .. 引入 ...
    # collections(模块) Iterator迭代器类型  Iterable可迭代对象类型
    from collections import Iterator,Iterable
    setvar = {"周杰伦",13,"aa",90}
    res = isinstance(setvar,Iterator)
    print(res)
    res = isinstance(setvar,Iterable)
    print(res)
    
    # 判断range对象的迭代属性
    for  i in range(9):
    	print(i)
    # res = next(range(9))
    res1 = isinstance(range(9),Iterable)
    print(res1)
    res2 = isinstance(range(9),Iterator)
    print(res2)
    
    # 把range对象变成迭代器
    '''
    如果是一个迭代器,一定具备可迭代属性
    如果是可迭代对象,不一定是迭代器
    '''
    print("<===>")
    # iter   __iter__()
    it2 = range(9).__iter__()
    print(isinstance(it2,Iterator))
    print(isinstance(it2,Iterable))
    
    # (4) 配合for循环遍历迭代器
    for i in it2:
    	print(i)
    # 迭代器在遍历数据的时,要注意方向是单向不可逆
    # next(it2)
    
    # 重置迭代器
    print("<====>")
    it2 = iter(range(9))
    for i in range(3):
    	res = next(it2)
    	print(res)
    print(next(it2))
    print(next(it2))
    print(next(it2))
    

      

  • 相关阅读:
    WKWebView加载显示问题
    获取iOS设备信息(内存/电量/容量/型号/IP地址/当前WIFI名称)
    iOS scrollsToTop
    iOSNSTimer 后台运行
    iOS监听home,进入后台
    iOS 模拟器改变定位地点的两种方法
    iOS 系统定位具体到省市区街道
    iOS 中的 HotFix 方案总结详解
    iOS 10 :用 UIViewPropertyAnimator 编写动画
    iOS中常见 Crash 及解决方案
  • 原文地址:https://www.cnblogs.com/huangjiangyong/p/10906507.html
Copyright © 2011-2022 走看看