zoukankan      html  css  js  c++  java
  • 09-03可迭代对象与迭代器

    可迭代对象与迭代器

    可迭代对象

    1、什么是可迭代对象

    • 有__iter__方法的叫可迭代对象
    • 可以在for .. in ..语句出现的对象
    例:有__iter__方法的叫可迭代对象
        In [10]: r = range(5)
    
        In [11]: r.__iter__   # 有__iter__方法的都叫可迭代对象
    
    例:可以在for .. in ..语句出现的语句
    
        In [11]: for x in range(5):   # 可以在for...in...语句出现
            ...:     pass
            ...: 
    
        因为for in语句要求一个可迭代对象
    

    2、我们前面学过的可迭代对象

    我们学过的7种数据结构和range, dict_keys, dict_values, dict_itemas都是可迭代对象。
    7种常用数据结构都是可迭代对象:列表、元组、字符串、bytes、bytearray、字典、集合

    迭代器

    1、什么是迭代器

    总结:有__next__方法的可迭代对象叫迭代器。

    Python3 迭代器与生成器

    • 迭代是Python最强大的功能之一,是访问集合元素的一种方式。
    • 迭代器是一个可以记住遍历的位置的对象。
    • 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。
    • 迭代器有两个基本的方法:iter() 和 next()。
    • 字符串,列表或元组对象都可用于创建迭代器:
    例:
        In [12]: it = iter(range(5))
    
        In [13]: it.__next__()   # 迭代器都有next方法
        Out[13]: 0
    
    总结:有__next__方法的可迭代对象叫迭代器。
    

    2、可迭代对象与迭代器关系

    • 可迭代对象可以转换为迭代器。(可迭代对象不是迭代器,但可以转换)
      • iter函数可以把一个可迭代对象转换为迭代器。
    • next函数可以从迭代器里取出下一个元素。

    迭代器原理:

    迭代器会保存一个指针, 指向可迭代对象的当前元素。
    调用next函数的时候, 会返回当前元素, 并且把指针指向下一个元素。
    当没有下一个元素时, 会抛出stopiteration异常。

    例:可迭代对象不是迭代器
    In [5]: next(range(5))
    ---------------------------------------------------------------------------
    TypeError                                 Traceback (most recent call last)
    <ipython-input-5-77906a45c21a> in <module>()
    ----> 1 next(range(5))
    
    TypeError: 'range' object is not an iterator
    
    In [14]: next(iter(range(5)))   # 需要使用iter方法转换为迭代器才能使用next方法
    Out[14]: 0
    
    迭代器会保存一个指针, 指向可迭代对象的当前元素。
    调用next函数的时候, 会返回当前元素, 并且把指针指向下一个元素。
    当没有下一个元素时, 会抛出stopiteration异常。
    

    3、迭代器的用法

    • 需要用next方法把值取出来使用
    方法1:
    In [16]: lst = [['m', 1, 2, 3, 4], ['age', 0, 1, 2, 3]]
    
    In [17]: for x in lst:
        ...:     key = x[0]
        ...:     for v in x[1:]:
        ...:         print()
        ...:
    
    方法2:
    In [18]: for x in lst:
        ...:     it = iter(x)
        ...:     key = next(it)
        ...:     for v in it:
        ...:         print()
        ...:
    

    4、for循环的底层实现

    • for in 循环对于可迭代对象:首先调用iter方法转换为迭代器, 然后不断的调用next方法, 直到抛出Stopiteration异常。
    In [19]: it = iter(itratable)
        ...: while True:
        ...:     try:
        ...:         next(it)
        ...:     except StopIteration:
        ...:         return
    

    每周总结

    内置数据结构:
        七种内置数据结构:
            列表
            元组
            类字符串:操作几乎相同
                字符串
                bytes
                bytearray
            集合
            字典
    
            线性结构:特点就是切片操作
                列表
                元组
                类字符串:操作几乎相同
                    字符串
                    bytes
                    bytearray
            解构与封装
    
        成员运算:
            set:O(1)
            dict:
                O(1) with key
                O(n) with value
            其他:
                O(n)
    
        解析式:
            列表
            生成器解析
            集合解析
            字典解析
    
        可迭代对象与迭代器:
            可迭代对象:
                具有__iter__方法
            迭代器:
                需是可迭代对象
                具有__next__方法
    
            可迭代对象可以使用iter转换为迭代器。
            迭代器可以使用next方法一个一个调用出来。
    
  • 相关阅读:
    2017年7月10日 20:34:02 简易博客记录组
    Oracle审计表AUD$处理方法 (Z)
    Oracle中trace的几种(Z)
    查看oracle数据库是否归档和修改归档模式(转)
    oracle exp-000991
    基于公司级平台封装的SqlserverHelper
    pycharm运行测试程序提示no tests were found
    10-13 验证用户
    10-11 喜欢的数字
    10-1 Python 学习笔记
  • 原文地址:https://www.cnblogs.com/cishi/p/13041265.html
Copyright © 2011-2022 走看看