Python中的迭代器与生成器

Python中的迭代器与生成器介绍

一、迭代器iterator

迭代器是访问可迭代对象的工具。

迭代器是指用iter(obj)函数返回的对象

迭代器是可以用next(it)函数获取可迭代对象的数据

1、迭代器函数 iter()与next()

               iter(iterable)从可迭代对象中返回一个迭代器,iterable必须是                   能提供一个迭代器的对象

                next(iterable)  从迭代器iterator中获取下一个记录,如果无法获                    取下一条记录,则触发StopIterator异常
 

     说明:

             ①迭代器只能往前取值,不会后退

             ②用iter函数可以返回一个可迭代对象的迭代器

      示例:

               >>> L = [1,3,5,7]
               >>> it = iter(L)    #让L提供一个能访问自己的迭代器
               >>> next(it)
               1
               >>> next(it)
               3

  2、迭代器的用途:

       可以依次访问可迭代对象的数据(可代替循环遍历)

       示例:>>> L = [1,23,45,6]
             >>> it = iter(L)
             >>> while True:
                 try:
                     x = next(it)
                     print(x)
                 except StopIteration:
                     break

二、迭代工具函数:

作用是生成一个个性化的可迭代对象

函数:
      zip(iter1 [,iter2[....]])

   返回一个zip对象,此对象用于生成元组,此元组的每个数据来源于参数中的可迭代       对象,当最小 的可迭代对象不再提供数据时迭代结束

   
   enumerate(iterable [,start])

   生成带索引的枚举对象,返回的迭代类型为索引-值对(index- value),默认索引       从0 开始,也可用 start指定
   

     zip示例:>>> numbers = [10086,10000,10010,95588]
              >>> names = ['中国移动','中国联通','中国电信']
              >>> for t in zip(numbers,names):
                  print(t)
                  (10086, '中国移动')
                  (10000, '中国联通')
                  (10010, '中国电信')

  enumerate示例:

             >>> names = ['中国移动','中国电信','中国联通']
             >>> for t in enumerate(names):
                      print(t)

             (0, '中国移动')
             (1, '中国电信')
             (2, '中国联通')
            >>> for t in enumerate(names,101):
                      print(t)

             (101, '中国移动')
             (102, '中国电信')
             (103, '中国联通')

Python中的迭代器与生成器介绍

一、迭代器iterator

迭代器是访问可迭代对象的工具。

迭代器是指用iter(obj)函数返回的对象

迭代器是可以用next(it)函数获取可迭代对象的数据

1、迭代器函数 iter()与next()

               iter(iterable)从可迭代对象中返回一个迭代器,iterable必须是                   能提供一个迭代器的对象

                next(iterable)  从迭代器iterator中获取下一个记录,如果无法获                    取下一条记录,则触发StopIterator异常
 

     说明:

             ①迭代器只能往前取值,不会后退

             ②用iter函数可以返回一个可迭代对象的迭代器

      示例:

               >>> L = [1,3,5,7]
               >>> it = iter(L)    #让L提供一个能访问自己的迭代器
               >>> next(it)
               1
               >>> next(it)
               3

  2、迭代器的用途:

       可以依次访问可迭代对象的数据(可代替循环遍历)

       示例:>>> L = [1,23,45,6]
             >>> it = iter(L)
             >>> while True:
                 try:
                     x = next(it)
                     print(x)
                 except StopIteration:
                     break

二、迭代工具函数:

作用是生成一个个性化的可迭代对象

函数:
      zip(iter1 [,iter2[....]])

   返回一个zip对象,此对象用于生成元组,此元组的每个数据来源于参数中的可迭代       对象,当最小 的可迭代对象不再提供数据时迭代结束

   
   enumerate(iterable [,start])

   生成带索引的枚举对象,返回的迭代类型为索引-值对(index- value),默认索引       从0 开始,也可用 start指定
   

     zip示例:>>> numbers = [10086,10000,10010,95588]
              >>> names = ['中国移动','中国联通','中国电信']
              >>> for t in zip(numbers,names):
                  print(t)
                  (10086, '中国移动')
                  (10000, '中国联通')
                  (10010, '中国电信')

  enumerate示例:

             >>> names = ['中国移动','中国电信','中国联通']
             >>> for t in enumerate(names):
                      print(t)

             (0, '中国移动')
             (1, '中国电信')
             (2, '中国联通')
            >>> for t in enumerate(names,101):
                      print(t)

             (101, '中国移动')
             (102, '中国电信')
             (103, '中国联通')

三、生成器Generator

  生成器是指能够动态提供数据的对象,生成器对象也是可迭代对象

  生成器有两种:

            生成器函数

            生成器表达式

 生成器函数的定义:

         含有yield语句的函数是生成器函数 ,此函数被调用将返回一个生成器对象
          yield翻译为产生(或生成)

yield 语句:

  语法:
            yield    表达式

  说明:
          yield 用于def函数中,目的是将此函数作用生成器函数使用
          yield用来生成数据,共迭代器和next(it)函数使用

生成器函数的说明:

  生成器函数的调用将返回一个生成器对象,生成器对象是一个可迭代对象,通常用来动态生成数据

  生成器函数调用return语句会触发一个StopIteration异常

**推导式创建生成器

  L = [x*x for x in range(10)]  #生成一个列表
  g = (x*x for x in range(10))  #生成一个生成器
 
 可以利用遍历去除生成器的元素,也可以利用__next__()来逐个取出。

猜你喜欢

转载自blog.csdn.net/extremelove520/article/details/83867570