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生成一个新的迭代器,可以重复取值.

  • 相关阅读:
    HDU 5115 Dire Wolf (区间DP)
    HDU 4283 You Are the One(区间DP(最优出栈顺序))
    ZOJ 3469 Food Delivery(区间DP好题)
    LightOJ 1422 Halloween Costumes(区间DP)
    POJ 1651 Multiplication Puzzle(区间DP)
    NYOJ 石子合并(一)(区间DP)
    POJ 2955 Brackets(括号匹配一)
    POJ 1141 Brackets Sequence(括号匹配二)
    ZOJ 3537 Cake(凸包+区间DP)
    Graham求凸包模板
  • 原文地址:https://www.cnblogs.com/ppf3678/p/9983932.html
Copyright © 2011-2022 走看看