• Python 入门之 Python三大器 之 迭代器


    1、迭代器

    (1)可迭代对象

    <1> 只要具有__ iter__()方法就是一个可迭代对象

    (我们可以通过dir()方法去判断一个对象具有什么方法,dir()会返回一个列表,这个列表中含有该对象的以字符串的形式的所有方法名)

    lst.__iter__()
    dict.__iter__()
    

    <2> 可迭代对象的优点:

    可以直观的查看里面的数据。

    <3> 可迭代对象的缺点:

    占用内存

    可迭代对象不能迭代取值(除去索引,key以外)

    (2)迭代器:工具

    <1> 具有__ iter__() 和 __ next__() 两个方法的就是迭代器

    ( iter() 和 __ iter__() 是一样的 推荐使用iter() )

    lst = [1,2,3,4,5]
    l = lst.__iter__()            # 将可迭代对象转换成迭代器
    l.__iter__()                  # 迭代器指定__iter__()还是原来的迭代器
    print(l.__next__())   # 1
    print(l.__next__())   # 2
    

    <2> 迭代器基于上一次停留的位置,进行取值

    <3> 迭代器的优点:

    惰性机制: 节省空间

    <4>迭代器的缺点:

    不能直接查看值,迭代器查看到的是一个迭代器的内存地址

    一次性,用完就没有了

    不能逆行(后退)

    <5> 应用

    ​ 当数据量过大,大到足以撑爆你的内存或者以节省内存为首选因素时,将数据集设置为迭代器是一个不错的选择。(可参考为什么python把文件句柄设置成迭代器)。

    (3)空间换时间:容器存储大量的元素,取值时间短,但是容器占用空间大

    (4)时间换空间:迭代器就是节省了空间,但是取值时间较长

    (5)for 循环的本质

    l1 = [1, 2, 3, 4, 5, 6]
    obj = iter(l1)    # 1.将可迭代对象转化成迭代器
    while True:       # 2.利用while循环,next进行取值
        try:
            print(next(obj))
        except StopIteration:     # 3.利用异常处理终止循环
            break
    

    (6)Python2和Python3中的区别:

    pyhton3:
        iter()和 __iter__() 都有
        next()和__next__()都有
    
    python2:
        iter()
        next()
    
  • 相关阅读:
    扩展的局域网
    参数估计
    以太网的 MAC 层
    poj 1523Tarjan算法的含义——求取割点可以分出的连通分量的个数
    tarjan算法--求解无向图的割点和桥
    spfa负环判断
    codeforce 489d bfs分层处理
    并查集优化——压缩路径——秩优化
    SPFA_queue_链式前向星最短路 & HDU2433
    POJ3046选蚂蚁创建集合_线性DP
  • 原文地址:https://www.cnblogs.com/caiyongliang/p/11457130.html
Copyright © 2020-2023  润新知