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

    ''
    1、什么是迭代器
    迭代器即迭代取值的工具
    迭代:
    迭代是一个重复的过程,每一次重复都是基于上一次的结果而来的

    单纯的重复并不是迭代
    while True:
    print('1111')

    迭代:
    l=['a','b','c']

    def iterator(item):
    i=0
    while i < len(item):
    print(l[i])
    i+=1 #基于上一次的结果而来的重复,是迭代


    2、 为什么要有迭代器
    基于索引的迭代器取值方式只适用于列表、元组、字符串类型
    而对于没有索引的字典、集合、文件,则不在适用
    所以必须找到一种通用的并且不依赖于索引的迭代器取值方式=》迭代器

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

    3、如何用迭代器


    '''
    # l=['a','b','c']
    # i=0
    # while i < len(l):
    # print(l[i])
    # i+=1 #列表中while利用索引取值。

    # l = ['a', 'b', 'c']
    # s='hello'
    #
    # def iterator(item): #item='hello'
    # i = 0
    # while i < len(item):
    # print(item[i])
    # i += 1
    # # iterator(l)
    # iterator(s)


    # 可迭代的对象:在python中但凡内置有__iter__方法的对象都是可迭代的对象
    # 字符串、列表、元组、字典、集合、文件都是可迭代的对象
    # num1=10
    # num2=10.1
    # s1='hello'
    # l=[1,2,3]
    # t=(1,2,3)
    # d={'x':1}
    # s2={1,2,3}
    # f=open('a.txt','w')
    #
    # s1.__iter__
    # l.__iter__
    # t.__iter__
    # d.__iter__
    # s2.__iter__
    # f.__iter__


    #
    #
    # 迭代器对象:指的是既内置有__iter__方法,又内置有__next__方法的对象
    #执行可迭代对象的__iter__方法得到的就是内置的迭代器对象
    # 文件对象本身就是迭代器对象

    #强调:
    #1、迭代器对象一定是可迭代的对象,反之则不然



    # info={'name':'egon','age':18,'is_beautiful':True,'sex':'male'}
    # info_iter=info.__iter__() #加_iter_变成迭代器对象
    # # print(info_iter) #打印出的是字典的内存地址
    #
    # res1=info_iter.__next__()
    # print(res1) #取出的是字典里的key name
    #
    # res2=info_iter.__next__()
    # print(res2) #取出的是字典里的age
    #
    # res3=info_iter.__next__()
    # print(res3) #取出的是字典里的is_beautiful
    #
    # res4=info_iter.__next__()
    # print(res4) #取出的是字典里的sex
    #
    # info_iter.__next__() # 一旦迭代器取值取干净,再继续取就会抛出StopIteration



    # info={'name':'egon','age':18,'is_beautiful':True,'sex':'male'}
    # # info=[1,2,3,4,5]
    # info_iter=info.__iter__()
    # while True: #下面的这一段while循环其实做的就是_next_的工作。
    # try:
    # print(info_iter.__next__())
    # except StopIteration:
    # break


    #for循环:迭代器循环
    # info={'name':'egon','age':18,'is_beautiful':True,'sex':'male'}
    #in后跟的一定要是可迭代的对象
    # for k in info: # info_iter=info.__iter__()
    # print(k) #for循环其实就是把可迭代对象转变成迭代器对象,再执行next的操作

    # f=open('a.txt','r')
    # for k in f:
    # print(k)


    # 迭代器对象:指的是既内置有__iter__方法,又内置有__next__方法的对象
    # 执行迭代器对象的__next__得到的是迭代器的下一个值
    # 执行迭代器对象的__iter__得到的仍然是迭代器本身

    # iter_info=info.__iter__() #iter_info变成迭代器对象
    # # print(iter_info)
    # print(iter_info is iter_info.__iter__() is iter_info.__iter__().__iter__().__iter__().__iter__().__iter__())
    # 打出的是True


    #总结迭代器对象的优缺点:
    #优点:
    #1、提供了一种通用的、可以不依赖索引的迭代取值方式
    #2、迭代器对象更加节省内存
    # f=open('movie.tar.gz','rb')
    # f.__ next__()
    # f=open('db.txt','rt',encoding='utf-8')
    #
    # print(f.__next__())
    # print(f.__next__())
    # print(next(f)) #f.__next__()

    # s='hello'
    # print(s.__len__())
    # print(len(s))
    # s.__iter__()
    # print(iter(s))


    # 缺点:
    #1、迭代器的取值不如按照索引的方式更灵活,因为它只能往后取不能往前退
    #2、无法预测迭代器值的个数
    # names=['egon','alex_SB','wxx_SB']
    # iter_names=iter(names)
    # print(next(iter_names))
    # print(next(iter_names))
    #
    # iter_names=iter(names)
    # print(next(iter_names))
    # print(next(iter_names))
    # # print(next(iter_names))
    #
    # print(names[1])
    # print(names[1])



    # s=set('helllllo')
    # print(s)


    # for i in 10:
    # pass

    # list(10)

    # names=['a','b','c','d']
    # iter_names=iter(names)
    #
    # l1=list(iter_names)
    # print(l1)
    #
    # l2=list(iter_names)
    # print(l2) #iter_names是迭代器对象,list相当于for循环一样,把值取出来,当值都取出来后,再循环,就是空列表了

    # f=open('db.txt','rt',encoding='utf-8')
    #
    # print(list(f))
    # print(list(f))
    # print(list(f))
    # print(list(f))
    # print(list(f)) #['111111111 ', '222222222 ', '333333333']
    # []
    # []
    # []
    # [] 第一次取完之后,后面再取就都是空列表了


    # l1=[1,2,3,]
    # diedaiqi=l1.__iter__()
    # print(list(l1))
    # print(list(l1))
    # print(list(l1))
    # print(list(l1))
    # print(list(l1))
    # print(list(l1)) #[1, 2, 3]
    # [1, 2, 3]
    # [1, 2, 3]
    # [1, 2, 3]
    # [1, 2, 3]
    # [1, 2, 3]因为ll是可迭代对象,不是迭代器对象,所以每次打印,还是列表



  • 相关阅读:
    静态检查lua语法工具luacheck
    centos7系列:
    git submodule 教程
    CENTOS 7 安装redis
    python基本语法:
    彻底理解lib和dll
    C++语言的设计与演化(空白):
    《Effective C++》 目录:
    C++进阶书籍(转)
    学习的心态(转)
  • 原文地址:https://www.cnblogs.com/fxc-520520/p/9174551.html
Copyright © 2011-2022 走看看