zoukankan      html  css  js  c++  java
  • Python全栈day18(迭代器协议和for循环工作机制)

    一,什么是迭代和递归

      递归和迭代都是循环的一种。

      简单地说,递归是重复调用函数自身实现循环。迭代是函数内某段代码实现循环,而迭代与普通循环的区别是:循环代码中参与运算的变量同时是保存结果的变量,当前保存的结果作为下一次循环计算的初始值。

    二,什么是迭代器协议

      1.迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代 (只能往后走不能往前退)

      2.可迭代对象:实现了迭代器协议的对象(如何实现:对象内部定义一个__iter__()方法)

      3.协议是一种约定,可迭代对象实现了迭代器协议,python的内部工具(如for循环,sum,min,max函数等)使用迭代器协议访问对象。

      PS:(字符串,列表,元祖,字典,集合,文件对象)这些都不是可迭代对象,只不过在for循环,调用了他们内部的__iter__方法,把他们变成了可迭代对象6

      列子 day18-2.py

    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__())
    
    <str_iterator object at 0x000002E0DA335978>
    h
    e
    l
    l
    o
    

      如果取完了还继续迭代会报错StopIteration

      文件也是使用这种方法转换成可迭代对象

    f=open('test.txt','r+')
    iter_f=f.__iter__()
    print(iter_f.__next__())
    print(iter_f.__next__())
    

      使用while取模拟for循环做的事情

    l=[1,2,3]
    diedai_l=l.__iter__()
    while True:
        try:
            print(diedai_l.__next__())
        except StopIteration:
            print('迭代完毕,循环终止')
            break
    
    
    1
    2
    3
    迭代完毕,循环终止
    

      以上可以使用内置函数next进行操作day18-4.py

    l = [1,2,3,4]
    iter_l=l.__iter__()
    print(next(iter_l))

    1

      

  • 相关阅读:
    js中undefined,null,NaN的区别
    js中数字计算精度
    BestCoder Round #32
    POJ 2299 求逆序对(归并排序或树状数组)
    POJ 2603
    CodeForces 515C
    POJ 1853 背包问题
    UVA 10115 子符串替换
    POJ 1155 树状dp
    HDU 2196 树状dp 求树中节点之间的最长距离
  • 原文地址:https://www.cnblogs.com/minseo/p/8288854.html
Copyright © 2011-2022 走看看