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

    迭代器就是迭代的工具

    迭代:指的是重复迭代,每一次迭代的结果都是基于上一次结果而来的

    迭代器:

    指的是迭代取值的工具

    PS:如果我们想知道python中迭代器是什么,首先我们要知道什么是可迭代对象

    可迭代对象

    凡是内部有.__iter__()

    方法的都是可迭代对象,比如str,list,tuple,dict,set,f(文件)

    获取迭代器

    通过序列类型.__iter__()方法得到的返回值,就是迭代器对象

    list = [1,2,3]
    print(list.__iter__())
    
    打印结果:
    <list_iterator object at 0x0000022F3EEDC848>

    如何迭代取值?

    通过迭代器对象.__next__(),每执行一次,都会从迭代器对象中取一个值,取完再取的话就会报错:StopIteration

    # 迭代取值
    list = [1, 2, 3,4]
    list.__iter__().__next__()
    print(list.__iter__().__next__())
    
    打印结果:
    1

    这里举个例子,有4个元素取5个会怎样?

     

     那么现在我们就可以用try和except把异常抛出

    try:捕获异常(StopIteration)

    except:抛出异常

    list1 = [1, 2, 3, 4]
    list_iter = list1.__iter__()
    try:
        print(list_iter.__next__())
        print(list_iter.__next__())
        print(list_iter.__next__())
        print(list_iter.__next__())
        print(list_iter.__next__())
    except StopIteration:
        print('end')

     迭代器对象的优点

    1、不依赖于索引迭代取值

    2、节省内存空间

    缺点:

    1、取指定的某个值麻烦

    2、每次取值都要从第一个开始,无法通过索引进行取值

    可迭代对象和迭代器对象的区别:

    可迭代对象:凡是内部有.__iter__()方法的都是可迭代对象

    迭代器对象:通过序列类型.__iter__(),得到的返回值就是迭代器对象

    注意:可迭代对象不一定是迭代器对象

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

  • 相关阅读:
    centos7 安装中文编码
    docker一些命令
    bash: ifconfig: command not found
    sublime3的licence(update 2016-04-14)
    Mac下更改python版本为3.5
    BigDecimal的equals
    cvc-elt.1: 找不到元素 'beans' 的声明
    Configuration problem: Only one AsyncAnnotationBeanPostProcessor may exist within the context.
    You need tcl 8.5 or newer in order to run the Redis test
    自定义的类型转换器中怎样自定义错误消息?(待解答)
  • 原文地址:https://www.cnblogs.com/aheng/p/11852943.html
Copyright © 2011-2022 走看看