zoukankan      html  css  js  c++  java
  • 第48讲:魔方方法——迭代器

    一 迭代器的相关概念

    • 迭代:每一次重复的过程被称作一次迭代,每一次迭代得到的结果,将会作为下一次迭代的初始值。
    • 迭代器:提供迭代方法的容器。我们通常接触的迭代器有列表、元组、字符串和字典,他们都支持迭代操作。
    • 举例:
    • 1 >>> for i in "FishC":
      2 ...     print(i)
      3 ...
      4 F
      5 i
      6 s
      7 h
      8 C

      例子中字符串就是一个容器,同时也是一个迭代器;for语句的作用就是触发这个迭代器的迭代功能,每次从容器里面一次拿出一个数据就是迭代操作。

    • 内置函数:
      • iter()
        • 功能:用来生成迭代器。
        • 语法:iter(object[, sentinel])
        • 参数:
          • bject -- 支持迭代的集合对象。
          • sentinel -- 如果传递了第二个参数,则参数 object 必须是一个可调用的对象(如,函数),此时,iter 创建了一个迭代器对象,每次调用这个迭代器对象的__next__()方法时,都会调用 object。
        • 返回值:迭代器对象。
      • next()
        • 功能:next() 返回迭代器的下一个项目,下一个项目不存在会抛出StopIteration的异常。next() 函数要和生成迭代器的iter() 函数一起使用。
        • 语法:next(iterable[, default])

        •  

          参数说明:
          • iterable -- 可迭代对象
          • default -- 可选,用于设置在没有下一个元素时返回该默认值,如果不设置,又没有下一个元素则会触发 StopIteration 异常。
        • 返回值:返回对象帮助信息。
      • 举例:
      •  1 >>> next(it)
         2 Traceback (most recent call last):
         3   File "<stdin>", line 1, in <module>
         4 StopIteration
         5 >>> string = "FishC"
         6 >>> it = iter(string)
         7 >>> next(it)
         8 'F'
         9 >>> while True:
        10 ...     try:
        11 ...             each = next(it)
        12 ...     except StopIteration:
        13 ...             break
        14 ...     print(each)
        15 ...
        16 i
        17 s
        18 h
        19 C
        20 >>>
    • 对应的魔法方法:
      • __iter__()
      • __next__()
      • 举例:
      •  1 >>> class Fibs:
         2 ...     def __init__(self):
         3 ...             self.a = 0
         4 ...             self.b = 1
         5 ...     def __iter__(self):
         6 ...             return self
         7 ...     def __next__(self):
         8 ...             self.a,self.b = self.b,self.a + self.b
         9 ...             return self.a
        10 ...
        11 >>> fibs = Fibs()
        12 >>> for each in fibs:
        13 ...     if each < 20:
        14 ...             print(each)
        15 ...     else:
        16 ...             break
        17 ...
        18 1
        19 1
        20 2
        21 3
        22 5
        23 8
        24 13
      • 可以手动控制输出的斐波那契数列范围的代码:
      •  1 >>> class Fibs:
         2 ...     def __init__(self,n = 10):
         3 ...             self.a = 0
         4 ...             self.b = 1
         5 ...             self.n = n
         6 ...     def __iter__(self):
         7 ...             return self
         8 ...     def __next__(self):
         9 ...             self.a,self.b = self.b,self.a+self.b
        10 ...             if self.a > self.n:
        11 ...                     raise StopIteration
        12 ...             return self.a
        13 ...
        14 >>> fibs = Fibs()
        15 >>> for each in fibs:
        16 ...     print(each)
        17 ...
        18 1
        19 1
        20 2
        21 3
        22 5
        23 8
        24 >>> fibs = Fibs(100)
        25 >>> for each in fibs:
        26 ...     print(each)
        27 ...
        28 1
        29 1
        30 2
        31 3
        32 5
        33 8
        34 13
        35 21
        36 34
        37 55
        38 89
        39 >>>
  • 相关阅读:
    .Net -- NLog日志框架配置与使用
    Prism -- 简介
    Prism.WPF -- Prism框架使用(下)
    Prism.WPF -- Prism框架使用(上)
    Win32Api -- 关闭当前应用
    WPF -- 一种圆形识别方案
    C#语言特性及发展史
    WPF -- 一种实现本地化的方法
    DEV中右键菜单如何只在非空单元格上显示?
    打开一个窗体,其他窗体处于不可编辑状态
  • 原文地址:https://www.cnblogs.com/luoxun/p/13721967.html
Copyright © 2011-2022 走看看