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

    什么是迭代器:

      迭代是一个重复的过程,每一次重复都是基于上一次的结果而来的(单纯的重复并不是迭代)

    为什么要用迭代器:

    基于索引的迭代器取值方式只适用于列表,元组,字符串类型,而对于没有索引的字典,集合,文件则不能通过索引取值。

    而迭代器是一种通用的不依赖于索引的迭代器取值方式

    迭代器适用于可迭代的数据类型

    可迭代的对象包含(即可以调用python内置_iter_方法的对像):

    1.字符串

    2.类表

    3.元祖

    4.字典

    5.集合

    迭代器对象:(指即内置有_iter_方法_next_方法

    执行迭代对象的_iter_方法---------》》》得到的就是内置的就是迭代器对象

    (迭代器一旦取值干净,再继续取就会抛出StopIterable错误)

    迭代器对象一定是可迭代对象

    文件不用转本身就是迭代器对象

    例如1:字典通过转成迭代器对象取值
    dic={'a':1,'b':2,'c':3}
    dic_iter=dic.__iter__()
    print(dic_iter.__next__())   # a
    print(dic_iter.__next__())   # b
    print(dic_iter.__next__())   # c

    例如2:

    user={'name':'yangzhizong','age':21,}
    info=user.__iter__()
    k1=info.__next__()
    print(k1)
    k2=info.__next__()
    print(k2)

    例如3:

    另外一种方式通过while循环取值,并且限定取值结束后自动结束
    user={'name':'yangzhizong','age':21,}
    info=user.__iter__()
    while True:
        try:
            print(info.__next__())
        except StopIteration:
            break

    重点:其实for循环的工作原理,就是基于迭代器工作
    in后面跟的一定要是可迭代的对象,进而拿到迭代器对象
    user={'name':'yangzhizong','age':21,'hobbies':'study'}
    for k in user:      #user_iter=user_iter_()
        print(k)

    执行迭代器对象的_next_得到的是迭代器的下一个值

    执行迭代器对象的_iter_得到的仍是迭代器本身

    (为了把for循环统一起来,in后面不用判断是可迭代对象还是迭代器对象(文件))

    优点:

    1.提供一种统一的、不依赖于索引的迭代方式

    2.惰性计算,节省内存

    缺点:

    1.无法获取长度(只有在next完毕才知道到底有几个值)

    2.一次性的,只能往后走,不能往前退

    l=['a','b','c','d']
    l1=l.__iter__()
    print(list(l1))  #第一次会把l里面的参数全部取出,后面就不会再取
    print(list(l1)) #为空
    print(l) 

    s=[1,2,3,4]
    print(s.__len__())
    print(len(s)) #可以简化书写方式


    name=['a','b','c']
    iter_name=iter(name) #可以简化书写方式
    print(next(iter_name))
  • 相关阅读:
    线性参考
    unix下安装Server(静默方式)
    ArcGIS Server REST开发模式
    Python中调用AO
    Oracle 冷备份
    平头缓冲
    Oracle 热备份
    Socket获取远程连接者的IP
    c#调用cmd执行相关命令
    C#_winform_DataGridView_的18种常见属性 (转)
  • 原文地址:https://www.cnblogs.com/yangzhizong/p/9173223.html
Copyright © 2011-2022 走看看