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]

  • 相关阅读:
    Java学习(运算符,引用数据类型)
    Java学习(基本语句,语法,变量)
    Java学习(简介,软件安装)
    MySQL连接查询(多表查询)
    MySQL数据约束
    VS code MacOS 环境搭建
    三维空间中xoy平面上特定抛物线的正等测投影解析解的一种求法
    抛物线正等测投影的解析解求法
    抛物线正等测投影数值解的求法
    反向工程“你的使用说明书”小记
  • 原文地址:https://www.cnblogs.com/gepu1991/p/9142831.html
Copyright © 2011-2022 走看看