这篇文章主要讲解了“python迭代、可迭代、迭代器举例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python迭代、可迭代、迭代器举例分析”吧!
下面我们通过斐波那契数列类的案例来详细了解迭代器、生成器。
class Fib(object): # count表示生成斐波那契数列的个数 def __init__(self, count): self.count = count # 保存前两个值 self.x = 0 self.y = 1 # 记录生成数列的下标 self.index = 0 # 声明Fib类是可迭代的 def __iter__(self): return self # 生成下一个数 def __next__(self): if self.index < self.count: result = self.x self.x, self.y = self.y, self.x + self.y self.index += 1 return result else: raise StopIteration # 创建迭代器 fib = Fib(6) # 获取迭代器下一个值 print(next(fib)) # 遍历迭代器其余的值 for value in fib: print(value) print(fib) ll = (i for i in range(10)) print(ll) out: 0 1 1 2 3 5 <__main__.Fib object at 0x000001E493DF5700> <generator object <genexpr> at 0x000001E493936430>
迭代器指有__iter__方法的函数或类运行或创建实例后生成的命名空间。打印迭代器显示的就是某某对象在内存某处,迭代器实质是一个内存地址,通过特定的方法访问该地址可以获得相应的数据。
紧接着前面的代码,测试下列代码。
fib1 = Fib(6) fib2 = Fib(5) print(fib1) print(fib2) out: <__main__.Fib object at 0x000001AD3E445700> <__main__.Fib object at 0x000001AD3E48A4F0>
可以看到fib1和fib2虽然内部代码相同,但由于它们的参数不同所以它们有不同的命名空间,那么它们就是不同的迭代器。
生成器指获取迭代器内部数据的方法或函数。注意方法和函数本身不是生成器,只有执行后有命名空间且可以返回值的才是生成器。
def even(n): # 定义一个返回值是偶数的生成器,值范围在0至n之间 i = 0 while i <= n: if i % 2 == 0: yield i i += 1 print('__iter__' in dir(even)) print('__next__' in dir(even)) num = even(5) print('__iter__' in dir(num)) print('__next__' in dir(num)) out: False False True True
生成器有2种:
通过__next__方法return返回值。例子是上面的Fib类。
通过yield或yield from语句返回值。例子是上面的even函数。有yield或yield from语句的函数在执行后会自动生成__iter__方法和__next__方法。
感谢各位的阅读,以上就是“python迭代、可迭代、迭代器举例分析”的内容了,经过本文的学习后,相信大家对python迭代、可迭代、迭代器举例分析这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。