zoukankan      html  css  js  c++  java
  • Python3的迭代器

    迭代(iterate):意味着多次重复,类似循环。

    迭代器两个基本方法:

    __iter__:返回一个迭代器,包含__next__方法的对象,调用这个方法时可以不提供参数。

    __next__:调用该方法时,迭代器应返回其下一个值,如果迭代器没有可供返回的值,就引发StopIteration异常。

    迭代器出现的原因:

    很多情况下,使用列表有点大材小用。如果你有一个逐个计算值的函数,你可能只想逐个地获取值,而不是一次性获得所有。如果有很多值,或者无穷多的值时,就需要列表足够大。比如斐波拉契数。

     1 # 运用生成器实现斐波那契数列
     2 import sys
     3 
     4 # 要多少数就输入多少n
     5 def fibs(n):
     6     a,b,counter = 0, 1, 0
     7     while True:
     8         if counter > n:
     9             return
    10         yield a
    11         a, b = b, a+b
    12         counter += 1
    13 
    14 #求1000以内的斐波那契数列
    15 f = fibs(10)
    16 
    17 while True:
    18     try:
    19         print(next(f), end = " ")
    20     except StopIteration:
    21         sys.exit()
    22 
    23 ##########0 1 1 2 3 5 8 13 21 34 55##########
    迭代器的对象:
    列表、元组、字符串
    >>> list1 = [1,2,3]
    >>> lis = iter(list1)
    >>> print(next(lis))
    1
    >>> print(next(lis))
    2
    >>> print(next(lis))
    3
    >>> print(next(lis))
    Traceback (most recent call last):
      File "<pyshell#5>", line 1, in <module>
        print(next(lis))
    StopIteration
    
    
    >>> str1 = "123"
    >>> st = iter(str1)
    >>> print(next(st))
    1
    >>> print(next(st))
    2
    >>> print(next(st))
    3
    >>> print(next(st))
    Traceback (most recent call last):
      File "<pyshell#11>", line 1, in <module>
        print(next(st))
    StopIteration
    >>> tup1 = (1,2,3)
    >>> tu = iter(tup1)
    >>> for i in tu:
        print(i)   
    1
    2
    3


    从迭代器创建序列

    除了对迭代器和可迭代对象进行迭代之外,还可将它们转换为序列。
    在可使用序列的情况下,大多也可使用迭代器或可迭代对象(诸如索引和切片等操作除外)。
    # 使用构造函数 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
    
    ti = TestIterator()
    print(list(ti))

    输出:

    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

  • 相关阅读:
    grunt in webstorm
    10+ Best Responsive HTML5 AngularJS Templates
    响应式布局
    responsive grid
    responsive layout
    js event bubble and capturing
    Understanding Service Types
    To add private variable to this Javascript literal object
    Centering HTML elements larger than their parents
    java5 新特性
  • 原文地址:https://www.cnblogs.com/gepu1991/p/9142831.html
Copyright © 2011-2022 走看看