• python 迭代器


    str, list, tuple, dict, set是可迭代的数据类型

    那么为什么他们可迭代呢

    因为他们都遵循了可迭代协议. 什么是可迭代协议.

     iterable表⽰可迭代的. 表⽰可迭代协议. 那么如何进⾏验证你的数据类型是否
    符合可迭代协议. 我们可以通过dir函数来查看类中定义好的所有⽅法.

    s = "我的哈哈哈"
    print(dir(s)) # 可以打印对象中的⽅法和函数
    print(dir(str)) # 也可以打印类中声明的⽅法和函数

    在打印结果中. 寻找__iter__ 如果能找到. 那么这个类的对象就是⼀个可迭代对象.

    这是查看⼀个对象是否是可迭代对象的第⼀种办法. 我们还可以通过isinstence()函数来查
    看⼀个对象是什么类型的

    l = [1,2,3]
    l_iter = l.__iter__()
    from collections import Iterable
    from collections import Iterator
    print(isinstance(l,Iterable)) #True
    print(isinstance(l,Iterator)) #False
    print(isinstance(l_iter,Iterator)) #True
    print(isinstance(l_iter,Iterable)) #True

    如果对象中有__iter__函数. 那么我们认为这个对象遵守了可迭代协议.
    就可以获取到相应的迭代器. 这⾥的__iter__是帮助我们获取到对象的迭代器. 我们使⽤迭代
    器中的__next__()来获取到⼀个迭代器中的元素. 那么我们之前讲的for的⼯作原理到底是什
    么?

    s = "我爱北京天安⻔"
    c = s.__iter__() # 获取迭代器
    print(c.__next__()) # 使⽤迭代器进⾏迭代. 获取⼀个元素 我
    print(c.__next__()) #
    print(c.__next__()) #
    print(c.__next__()) #
    print(c.__next__()) #
    print(c.__next__()) #
    print(c.__next__()) #
    print(c.__next__()) # StopIteration

    使⽤while循环+迭代器来模拟for循环

    lst = [1,2,3]
    lst_iter = lst.__iter__()
    while True:
        try:
            i = lst_iter.__next__()
            print(i)
        except StopIteration:
            break       

    Iterable: 可迭代对象. 内部包含__iter__()函数
     Iterator: 迭代器. 内部包含__iter__() 同时包含__next__().
     迭代器的特点:
     1. 节省内存.
     2. 惰性机制
     3. 不能反复, 只能向下执⾏.

    我们可以把要迭代的内容当成⼦弹. 然后呢. 获取到迭代器__iter__(), 就把⼦弹都装在弹夹
    中. 然后发射就是__next__()把每⼀个⼦弹(元素)打出来. 也就是说, for循环的时候. ⼀开始的
    时候是__iter__()来获取迭代器. 后⾯每次获取元素都是通过__next__()来完成的. 当程序遇到
    StopIteration将结束循环.
     

  • 相关阅读:
    动画编程1
    驾照助手
    《机器学习进阶》Udacity 机器学习基础 决策树+迷你项目
    《机器学习进阶》Udacity 机器学习基础 异常值+交叉验证
    《机器学习进阶》Udacity 机器学习基础 评估指标
    《机器学习进阶》Udacity 监督学习 决策树
    《机器学习进阶》Udacity 监督学习 SVM支持向量机
    入门模拟(图形输出)——B1036.跟奥巴马一起编程( 注意行数为偶数或奇数的情况)
    入门模拟——A1036.Boys vs Girls
    leetcode 深搜广搜
  • 原文地址:https://www.cnblogs.com/journey-mk5/p/9462248.html
Copyright © 2020-2023  润新知