码迷,mamicode.com
首页 > 编程语言 > 详细

python中迭代器和生成器

时间:2019-01-19 18:45:23      阅读:230      评论:0      收藏:0      [点我收藏+]

标签:ret   返回   nbsp   优雅   info   字符   信息   基本   style   

下面用

用一幅图来概括:

技术分享图片

 


迭代器理解
迭代是Python最强大的功能之一,是访问集合元素的一种方式。
迭代器是一个可以记住遍历的位置的对象。
迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。
迭代器有两个基本的方法:iter() 和 next()。
字符串,列表或元组对象都可用于创建迭代器:
任何实现了__iter__和__next__()方法的对象都是迭代器。__iter__返回迭代器自身,__next__返回容器中的下一个值

实现的方法

‘‘‘
迭代器
‘‘‘

class iterdemo():
def __init__(self):
self.number = 1


def __iter__(self):
print(‘iter!‘)
return self


def __next__(self):
print(‘next!‘)
self.number = self.number + 1
return self.number

n = iterdemo()
print(n)

for i in n:
print(i)

生成器
生成器是一种特殊的迭代器,它的返回值不是通过return而是用yield
生成器算得上是Python语言中最吸引人的特性之一,生成器其实是一种特殊的迭代器,不过这种迭代器更加优雅。它不需要再像上面的类一样写__iter__()和__next__()方法了,只需要一个yiled关键字。 生成器一定是迭代器(反之不成立)

方式一:

gen = (x + 2 for x in range(10))
print(next(gen))
print(next(gen))
print(next(gen))
print(next(gen))
print(next(gen))
print(next(gen))
print(next(gen))
print(next(gen))
print(next(gen))

方式二

#每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行。

def gen():
    i = 1
    print(‘i=‘, i)
    yield i
    i = i + 1
    print(‘i=‘, i)
    yield i
    i = i + 1
    print(‘i=‘, i)
    yield i
    i = i + 1
    print(‘i=‘, i)
    yield i


n = gen()
next(n)
next(n)
next(n)
next(n)

结果是: <generator object number at 0x005E4F60>说明是生成器

python中迭代器和生成器

标签:ret   返回   nbsp   优雅   info   字符   信息   基本   style   

原文地址:https://www.cnblogs.com/CK85/p/10292271.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!