zoukankan      html  css  js  c++  java
  • 关于迭代器

    方法__iter__返回一个迭代器,它是包含方法__next__的对象,而调用这个方法时可不提供
    任何参数。当你调用方法__next__时,迭代器应返回其下一个值。如果迭代器没有可供返回的值,
    应引发StopIteration异常。你还可使用内置的便利函数next,在这种情况下,next(it)与
    it.__next__()等效
     
    斐波那契数列:
    class Fib:
        def __init__(self):
            self.a=0
            self.b=1
        def __next__(self):
            self.a,self.b=self.b,self.a+self.b
            return self.a
        def __iter__(self):
            return self
    
    fib=Fib()
    for i in fib:
        if i<1000:
            print(i)
        else:
            break
     
    通过对可迭代对象调用内置函数iter,可获得一个迭代器:
    In [1]: it=iter([x for x in range(100)])
    
    In [2]: next(it)
    Out[2]: 0
    
    In [3]: next(it)
    Out[3]: 1
    从迭代器创建序列
    除了对迭代器和可迭代对象进行迭代(通常这样做)之外,还可将它们转换为序列。在可以
    使用序列的情况下,大多也可使用迭代器或可迭代对象(诸如索引和切片等操作除外)。一个这
    样的例子是使用构造函数list显式地将迭代器转换为列表
    class TestIterator: 
        value = 0 
        def __next__(self): 
            self.value += 1 
            if self.value > 10: raise StopIteration 
            return self.value 
        def __iter__(self): 
            return self
    it=TestIterator()
    print(list(it))

    运行结果:

    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
     
  • 相关阅读:
    2017.10.3 QBXT 模拟赛
    2017.10.2 QBXT 模拟赛
    2017.10.1 QBXT 模拟赛
    BZOJ 1093: [ZJOI2007]最大半连通子图
    BZOJ 1002: [FJOI2007]轮状病毒
    洛谷 P1079 Vigenère 密码
    LibreOJ #100. 矩阵乘法
    洛谷 P1379 八数码难题
    COGS 2794. 爱摔跤的比利海灵顿
    【渗透测试小白系列】之Banner信息收集
  • 原文地址:https://www.cnblogs.com/Kerryworld/p/10810454.html
Copyright © 2011-2022 走看看