zoukankan      html  css  js  c++  java
  • python三大神器之迭代器

    可迭代协议:

               内部含有__iter__方法的值/变量都是可迭代的.可迭代类型和python语言之间的协议.

    可迭代对象:

               iterable,内部包含__iter__()函数.

    迭代器:

              iterator,内部同时包含__iter__()和__next__().

    迭代器的特点:

             1节省内存,  2.惰性机制,  3一次性取值,只能按顺序取

    可迭代变量.__iter__(),返回一个迭代器.

     1 l = [1,2,3,4]
     2 res = l.__iter__()
     3 print(res.__next__())
     4 print(res.__next__())
     5 print(res.__next__())
     6 print(res.__next__())
     7 print(res.__next__())
     8 
     9 res.__setstate__(2)   # 控制迭代器从哪儿开始迭代
    10 print(res.__length_hint__())  # 迭代器中有多少个元素
    11 
    12 res1 = l.__iter__()
    13 res2 = l.__iter__()
    14 
    15 # res1和res2都是迭代器
    16 # 是两个完全不同的迭代器
    17 for i in res1:
    18     print(i)
    19 print('------')
    20 for i in res1:
    21     print(i)
    22 print('^^^^^^')
    23 for i in res2:
    24     print(i)
    25 print('!!!!!!!')
    26 for i in l.__iter__():
    27     print(i)
    28 print('******')
    29 for i in l.__iter__():
    30     print(i)
    31 for i in l:
    32     print(i)
    33 print('########')
    34 for i in l:
    35     print(i)

    for 循环取值

           for循环内部的机制就是迭代器取值机制

           在for循环执行的过程中:先把可迭代的变成一个迭代器,然后再从中一个个的取值

    for循环与迭代器的关系:

          无论是可迭代的还是迭代器都可以被for循环,

          如果直接循环迭代器,循环一次就能把值取完,不能再进行取值,

          如果循环的是非迭代器,那么每一次循环都会通过iter生成一个新的迭代器,可以重复取值.

  • 相关阅读:
    软件包的作用
    Sqlserver2008 表分区教程
    C#通用类型转换 Convert.ChangeType
    缓存 HttpContext.Current.Cache和HttpRuntime.Cache的区别
    用户信息 Froms验证票证
    .NET4.0 __doPostBack未定义
    TFS2012 安装 配置笔记
    MVC学习笔记一
    新博客..第一天..
    ORACLE多表查询优化
  • 原文地址:https://www.cnblogs.com/ppf3678/p/9983932.html
Copyright © 2011-2022 走看看