生成器、迭代器

所谓生成器就是指能够 “动态提供数据” 的对象,生成器对象也是可迭代对象。

生成器分为:生成器函数 和 生成器表达式 两种

  生成器函数:含有 yield语句的函数,此函数被调用返回生成器对象(也是可迭代对象)。在生成器函数中调用return会触发StopIteration异常。


class InteClass(object):
def __init__(self,num):
self.num = num
self.i = self.j = 1

def __iter__(self):
return self

def __next__(self):
if self.i < self.num:
self.j = self.i
self.i += 1
return self.j
raise StopIteration()

for i in InteClass(10000):
print(i)
#################################################
def
myInteger(n): i = 1 while i < n: yield i i += 1 for x in myInteger(10000): print(x)

  yield语句的作用就是将一个普通的函数编程generator,这样python解释器在识别函数myInteger(10000)时,就不会立即执行,而是返回一个迭代对象,for循环每次内部执行一周期时才会调用一次,从而保重节约空间,提高代码运行效率,又使函数不会像类那样繁琐。

生成器表达式:

  (表达式 for 变量 in 可迭代对象 [if 真值表达式 ])

 

    gen = (x ** 2 for x in range(1, 5))
    it = iter(gen)
    next(it)  # 1
    next(it)  # 4
    next(it)  # 9
    next(it)  # 16
    next(it)  # StopIteration

 

迭代工具函数

  迭代工具函数的作用是生成一个个性化的可迭代对象

函数:

  zip(iter1[, iter2[, ...]])  返回一个zip对象,此对象用于生成元组,此元组的个数由最小的可迭代对象决定

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

  

什么是迭代器

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

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

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

迭代器函数iternext

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

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

  说明:

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

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

  作用:

    迭代器对象能用next函数获取下一个元素.

    L = [2, 3, 5, 7]
    it = iter(L)  # 用L对象返回能访问L的迭代器, it绑定迭代器
    next(it)  # 2
    next(it)  # 3
    next(it)  # 5
    next(it)  # 7
    next(it)  # StopIteration 通知(没有数据)

 

迭代器是访问生成器(可迭代对象)的工具!

def myInteger(n):
    i = 1
    while i < n:
        yield i
        i += 1

for x in myInteger(5):
    print(x)
print("+++++++") it = iter(myInteger(8)) print(next(it)) print(next(it)) print(next(it))

 

posted @ 2020-03-19 21:30  风中劲草18  阅读(123)  评论(0)    收藏  举报