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

    迭代器协议
    对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么引起一个Stopiteration异常,已终止迭代。协议是一种约定,可迭代对象实现了迭代器协议,python的内部工具使用迭代器协议访问对象,遵循迭代器协议的对象就是可迭代对象
    可迭代对象
    实现了迭代器协议的对象,当数据使用的时候才会把数据加载到内存
    字符串、数组、集合、字典、文件对象都不是可迭代对象,只不过是for循环时,调用了他们内部的__iter__方法,把他们变成了可迭代对象

    for循环机制
    for循环就是基于迭代器协议工作的,首先将“字符串、数组、集合、字典、文件对象”转换成可迭代对象,然后再捕获迭代协议
    为何要有for循环?for循环就是基于迭代器机制,提供了一种统一的迭代机制
    Eg.1
    1 li = [1, 2, 3, 4, 5]
    2 new_li = li.__iter__()    # 转换成可迭代对象
    3 print(new_li.__next__())

    eg.2

    1 dic = {'a': 1, 'b': 2}
    2 it_dic = dic.__iter__()
    3 print(it_dic.__next__())  # 返回的就是字典的key值
    eg.3 用while模拟for循环机制
    1 n_li = li.__iter__()
    2 while True:
    3     try:
    4         print(n_li.__next__())
    5     except StopIteration:
    6         print("迭代完成,循环终止了!")
    7         break

    eg.4

    1 print("8" * 15)
    2 li = [1, 2, 3, 4]
    3 it_li = li.__iter__()    # 可迭代对象
    4 print(it_li.__next__())
    5 print(next(it_li))       # next()------>it_li.__next__()
  • 相关阅读:
    C嵌入汇编
    App 运营 推广相关
    POJ 3904 Sky Code
    数组的复制与动态扩展算法
    另类病毒的自删除方法
    oracle触发器中增删改查本表
    POJ 2773 Happy 2006 数学题
    Android手机便携式wifi的使用及无线数据传输(主要针对XP系统)
    Find the minimum线段树成段更新
    使用visual c++ 2005编译64位可执行文件
  • 原文地址:https://www.cnblogs.com/latencytime/p/15670956.html
Copyright © 2011-2022 走看看