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

    迭代器

    迭代器:迭代的工具

    • 迭代:迭代指的是重复迭代,每一次迭代的结果,都是基于上一次的结果而来
    • 迭代器:指的是迭代取值的工具。

    如果想要知道python中迭代器是什么,必须先知道什么是可迭代对象。

    可迭代对象:所有的序列类型:str , list , tuple , dict , set , txt,凡是内部有.__ iter__()方法的都是可迭代对象
    str1 = 'hello tank!'    # 字符串
    str1.__iter__()
    list1 = [1, 2, 3]  # list([1, 2, 3])  #列表
    list1.__iter__()
    set.__iter__()    # 集合
    dict.__iter__()   # 字典
    tuple.__iter__()  #元组
    open('a.txt').__iter__()  #文本
    
    获取迭代器对象:
    • 通过序列类型.__ iter (),得到的返回值就是迭代器对象(lterator).迭代器对象是内置有 __ iter __ 和 __ next __方法的对象

    迭代器优点

    • 不依赖索引迭代取值
    • 节省内存空间

    迭代器缺点

    • 取制定的值麻烦
    • 每次取值都要从第一个值开始,无法通过索引取值。
    迭代取值方式:

    print(迭代器对象.next())

    for循环内部原理:

    for item in 可迭代对象:
    print item

    #重复迭代,每一次迭代的结果都是基于上一次的结果而来的
    #可迭代对象:str, list, tuple, set, dict, f文件
    # str = 'hello world'
    # list = [1,2,3]
    # tuple = (4,5,6)
    # dict = {'name':'nick','age':18}
    # set = {7,8,9}
    # f = open('a.txt','r',encoding='utf-8')
    
    #str 示范
    # str_iter = str.__iter__()  #通过str._iter_()获取迭代器对象str_iter
    # print(str_iter.__next__())   #通过迭代器对象str_iter._next_()获取值
    # print(str_iter.__next__())
    # print(str_iter.__next__())
    
    #因为上述做法都是重复,可写成循环
    #循环版本
    #str_iter = str.__iter__()
    # while True:
    #     print(str_iter.__next__())   #虽然可以循环了,但是取完最后一个值后报错:StopIteration
    
    #解决办法
    # str_iter = str.__iter__()
    # while True:
    #     try:    #通过关键字try一直尝试,捕获异常
    #         print(str_iter.__next__())
    #     except StopIteration:     #直到遇到StopIteration
    #         break                 #就停下来
    
    #for循环版本
    # for item in f:
    #     print(item)
    
    
    #可迭代对象是迭代器对象吗?
    # str_iter = str.__iter__()
    # print((str_iter is str))  #False  结论:可迭代对象不一定是迭代器对象
    
    # list_iter = list.__iter__()
    # print((list_iter is list))  #False  结论:可迭代对象不一定是迭代器对象
    
    # tuple_iter = tuple.__iter__()
    # print((tuple_iter is tuple))  #False  结论:可迭代对象不一定是迭代器对象
    
    # set_iter = set.__iter__()
    # print((set_iter is set))  #False  结论:可迭代对象不一定是迭代器对象
    
    # dict_iter = dict.__iter__()
    # print((dict_iter is dict))  #False  结论:可迭代对象不一定是迭代器对象
    
    # f_iter = f.__iter__()
    # print((f_iter is f))   #True   文件比较特殊,它既是可迭代对象,又可以是迭代器对象
    
    #迭代器对象也是一个可迭代对象
    # str_iter = str.__iter__()
    # print(
    
  • 相关阅读:
    HBase in Action前三章笔记
    关于视频YUV
    23种设计模式用英语怎样表达?
    UVA 10620
    工具,帮助我们更高效的工作
    VS下控制台执行保持(不要一闪而过)
    C语言之结构体
    Linux grep命令和正则表达式
    C#中的“静态”
    推荐一个计算机视觉图书:python计算机视觉编程
  • 原文地址:https://www.cnblogs.com/lishuangjian/p/11853194.html
Copyright © 2011-2022 走看看