• Python -- 可迭代对象和迭代器


    5.9 可迭代对象

    可迭代对象: str , list , tuple , set , dict , range
    
    1.在Python中,但凡内部有__iter__方法的对象,都是可迭代对象
    2.查看对象内部的方法,可以通过dir()去判断一个对象具有的方法
    s = "Agoni"
    print(dir(s))
    # dir()可以返回一个列表,这个列表中含有该对象的以字符串的形式所有的方法名,这样就可以判断对象是否是可迭代对象
    s1 = 'alex'
    i = 100
    print('__iter__' in dir(i))  # False
    print('__iter__' in dir(s1))  # True
    
    # 可迭代对象的优点 
      可以直观的查看里面的数据
    # 缺点
      1.占用内存
      2.可迭代对象不能迭代取值(出去索引和字典的key)
    

    5.10 迭代器

    Python中,内部含有__inter__方法,并且含有__next__方法的对象就是迭代器
    
    # 可迭代对象转换成迭代器
    l = [1,2,3,4]
    obj = iter(l)
    print(obj)  # <list_iterator object at 0x00000274091DC2B0>   列表迭代器的地址
    
    # 迭代器取值
    l = [1,2,3]
    obj = iter(l)
    print(next(obj))  # 1
    print(next(obj))  # 2
    print(next(obj))  # 3
    print(next(obj))  # 迭代器中的值去完后还要next,就会报错 StopIteration
    
    # while模拟for的内部循环机制:
    将可迭代对象转换成迭代器,然后利用next进行取值,最后利用异常处理处理StopIteration抛出的异常。
    l = [1,2,3,4,5]
    obj = iter(l)    # 将可迭代对象转化成迭代器
    while True:      # 利用while循环,next进行取值
        try:
            print(next(obj))
        except StopIteration   # 利用异常处理终止循环
        	break
    
    # 迭代器的优缺点
    1. 优点:
       节省内存:迭代器在内存中相当于只占一个数据的空间:因为每次取值都上一条数据会在内存释放,加载当前的此条数据。
    惰性机制:next一次,取一个值,绝不过多取值。
    2. 缺点:
       不能直观的查看里面的数据。
       取值时不走回头路,只能一直向下取值。
    

    5.11 可迭代对象与迭代器的对比

    • 可迭代对象:是一个私有方法多,操作灵活(例如列表的增删改查),比较直观,但是占用内存,不能直接通过循环迭代取值的一个数据集

      应用:当你侧重于对于数据可以灵活处理,并且内存空间足够,将数据集设置为可迭代对象是明确的选择。

    • 迭代器:是一个非常节省内存,可以记录取值位置,可以直接通过循环+next的方法取值,但是不直观,操作方法比较单一的数据集

      应用:当你的数据量过大,大到足以撑爆你的内存或者你以节省内存为首选因素时,将数据集设置为迭代器是一个不错的选择。

  • 相关阅读:
    swagger生成接口文档
    二分查找通用模板
    go-json技巧
    【Go】获取用户真实的ip地址
    数据库储存时间类型
    密码加密:md5/sha1 +盐值
    参数里时间格式的转换
    不好定位的元素定位
    vim编辑器
    ps -ef | grep php kill -9
  • 原文地址:https://www.cnblogs.com/Agoni-7/p/11053948.html
Copyright © 2020-2023  润新知