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后面的对象是可迭代对象或者是迭代器对象

  • 相关阅读:
    jquery的y一些实用方法
    关于windows cmd 控制台输出中文
    大数据平台数据治理与建设方案
    django+easyui
    pyecharts 学习使用网址
    林业信息化整理 什么是林业信息化及如何进行林业信息化
    django 批量提交
    基于leaflet地图可视化(一)
    FastAPI 学习手册
    Python学习手册
  • 原文地址:https://www.cnblogs.com/Hades123/p/11019516.html
Copyright © 2011-2022 走看看