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

    迭代器

    迭代器:迭代的工具。可以说迭代是一种重复,但这个重复是基于上一次的结果在进行的,如果上一次发生问题,就没办法进行下一次的迭代了

    可迭代对象

    常言道,python一切皆对象,如

    x = 10
    y = 12.34
    name = 'hades'
    lis = [1,2,'3']
    tup = (1,2,'3')
    dic = {'name':'hades','weight':'125'}
    s = {1,2,4,6,'q'}
    def f1():
        print('from f1')
        
    f = open(r'aaa.txt','r',encoding='utf-8')
    

    上面所列的都是对象,但凡拥有__iter__方法的对象,就是可迭代对象

    name = 'hades'.__iter__()
    lis = [1,2,'3'].__iter__()
    tup = (1,2,'3').__iter__()
    dic = {'name':'hades','weight':'125'}.__iter__()
    s = {1,2,4,6,'q'}.__iter__()
    f = open(r'aaa.txt','r',encoding='utf-8')
    f.__iter__()
    f.close()
    
    x = 10.__iter__    #   报错
    def f1():
        print('from f1')
    f1.__iter__     # 报错
    
      File "<ipython-input-6-6ab44815576a>", line 10
        x = 10.__iter__    #   报错
                      ^
    SyntaxError: invalid syntax
    

    所以,在python中,除了数字类型和函数,其余的都是可迭代对象

    特点:

    • 内置有__iter__方法的都叫可迭代对象

    迭代器对象

    在上面的可迭代对象(字符串、列表、元组、字典、集合、文件)中,只有字符串/列表/元组可以通过索引取值,其他的都无法进行,因此我们就需要一个方法不依赖索引也能将里面的东西全部取出来

    这个方法就是__next__方法

    dic = {'name':'hades','weight':'125'}
    dic_iter = {'name':'hades','weight':'125'}.__iter__()
    print(dic_iter.__next__())
    print(dic_iter.__next__())
    print(dic_iter.__next__())   # 取不到了会报错
    
    name
    weight
    
    
    
    ---------------------------------------------------------------------------
    
    StopIteration                             Traceback (most recent call last)
    
    <ipython-input-5-5398e64fd512> in <module>
          3 print(dic_iter.__next__())
          4 print(dic_iter.__next__())
    ----> 5 print(dic_iter.__next__())   # 取不到了会报错
    
    
    StopIteration: 
    

    但这样还是很麻烦,如果元素比较多,这样一个一个写非常麻烦,我们可以使用whil循环来进行,再通过try...except...方法进行异常处理

    s = 'my name is hades.'
    s_iter = s.__iter__()
    
    while True:
        try:
            print(s_iter.__next__(),end= '  ')
        except Exception as e:
            break
    
    m  y     n  a  m  e     i  s     h  a  d  e  s  .  
    

    迭代器对象:执行完__iter__方法之后,拿到的返回值就是迭代器对象

    特点:

    1. 拥有__iter__方法,可迭代对象拥有__next__方法的才是迭代器对象
    2. 文件本身就是迭代器对象

    缺点:

    1. 取值比较麻烦,只可以向后取
    2. 无法计算长度

    for循环原理

    for循环称为迭代器循环,in后面必须是可迭代对象。

    上面写的while循环就是for循环原理

    因为迭代器使用__iter__后还是迭代器本身,所以for循环不用考虑in后面的对象是可迭代对象或者是迭代器对象

  • 相关阅读:
    开发一个微信小程序实例教程
    java注解
    dubbo provider提供者服务打包
    Dubbo记录
    SpringBoot整合ActiveMQ 生产者---消费者
    dubbox 的各种管理和监管
    Zookeeper 3.5启动时 8080端口被占用
    springboot整合最新版dubbo以及dubbo-admin的安装
    分布式服务框架 dubbo/dubbox 入门示例
    Maven安装配置【WIN10】
  • 原文地址:https://www.cnblogs.com/Hades123/p/11019516.html
Copyright © 2011-2022 走看看