zoukankan      html  css  js  c++  java
  • Python随心记--迭代器协议和for循环机制

    迭代器协议:
    对象必须提供一个next方法,执行该方法要命返回迭代中下一项,要么就引起一个Stoplteration异常,以终止迭代(只能往后走不能往前退)
    可迭代对象:
    实现了迭代器协议的对象(如何实现:对象内部定义一个__iter__()方法)
    协议是一种约定,可迭代对象实现了迭代器协议,pythond额内部工具(如for循环,sum、min、max函数)使用迭代器协议访问对象
    x = 'hello'
    iter_test = x.__iter__()
    print(iter_test)
    print(iter_test.__next__())
    print(iter_test.__next__())
    print(iter_test.__next__())
    print(iter_test.__next__())
    print(iter_test.__next__())

    for循环基于迭代器协议先执行x.__iter__(),跟索引没有半毛钱关系
    x = [1,2,3,4]
    print(x[0])
    iter_x = x.__iter__()
    print(iter_x.__next__())
    x = [1,2,3,4]
    #列表的遍历
    index = 0
    while index < len(x):
        print(x[index])
        index += 1
    x = {1,2,3,4}
    for i in x:
        print(i)
    #for循环的执行原理如下 -_-
    iter_x = x.__iter__()
    print(iter_x.__next__())
    模拟fon循环  try.....except StopIteration  捕捉异常
    x = {1,2,3,4}
    diedai_x = x.__iter__()
    while True:
        try:
            print(diedai_x.__next__())
        except StopIteration:
            print('迭代完毕,循环终止')
            break
    生成器
      yield #生成器定义关键字
    def test():
        yield 1
        yield 2
        yield 3
    g = test()   #得到生成器表达式
    print(g)
    
    
  • 相关阅读:
    第八周学习进度总结
    全国(球)疫情信息可视化
    第六周学习进度总结
    手把手教你爬取B站弹幕!
    Xpath基础学习
    团队成员及选题介绍
    第五周学习进度
    课堂练习之疫情APP
    SpringMVC02
    06 | 链表(上):如何实现LRU缓存淘汰算法?
  • 原文地址:https://www.cnblogs.com/Essaycode/p/10105280.html
Copyright © 2011-2022 走看看