python迭代器以及生成器
来源:互联网 发布:ff14男性捏脸数据 编辑:程序博客网 时间:2024/06/05 00:38
迭代,即重复做一些事很多次,python中通过for循环可以对序列、字典以及其他的对象进行迭代。在其他对象进行迭代时,需要在其他对象中实现__iter__方法。
__iter__方法返回一个迭代器,所谓的迭代器就是具有next方法的对象。在调用next方法时,迭代器会返回它的下一个值。如果next方法被调用,但迭代器没有值可以返回,就会引发一个StopIteration异常。
用迭代器实现一个斐波那契数列
class Fab(object): def __init__(self,max): self.max = max self.n, self.a, self.b = 0, 0, 1 def __iter__(self): return self def next(self): if self.n < self.max: r = self.b self.a, self.b = self.b, self.a + self.b self.n += 1 return r raise StopIterationprint '迭代器的输出结果:'for i in Fab(5): print i输出结果:
除了能够在迭代器和可迭代对象上进行迭代(这是经常做的)外,还能把它们转换为序列。在大部分能够使用序列的情况下,能使用迭代器替换。
生成器,是一种用普通的函数语法定义的迭代器,是包含yield语句的函数。除了名字不同以外,它的行为和普通函数也有很大的差别。这在于它不像return那样产生返回值,而是每次产生多个值。每次产生一个值(使用yield语句),函数机会被冻结:即函数停在那点等待被激活。函数被激活后就从停止的那点开始执行。函数的本地变量和上一次运行的状态一样。
用生成器实现斐波那契数列。
def fab(max): n, a, b = 0, 0, 1 while n < max: yield b a, b = b, a + b n = n + 1print '生成器生成的结果:'for i in fab(5): print i
用生成器解决n皇后问题。
def config(state, nextX): nextY = len(state) for i in range(nextY): if abs(nextX - state[i]) in (0,nextY - i): return True return Falsedef nQueens(num = 8, state = ()): if len(state) == num - 1: for pos in range(num): if not config(state, pos): yield (pos,) else: for pos in range(num): if not config(state, pos): for result in nQueens(num, state + (pos,)): yield (pos,) + resultdef prettyprint(solution): def line(pos, lenth = len(solution)): return '. '*(pos) + 'X ' + '. '*(lenth - pos -1) for pos in solution: print line(pos)i = 1for solution in nQueens(): print '第%d种放置情况' % (i) prettyprint(solution) i += 1
0 0
- python迭代器以及生成器
- Python 数据类型以及迭代器和生成器
- python生成器函数以及生成器表达式
- python 迭代器 生成器 生成器表达式
- python迭代对象,迭代器,生成器,以及yield用法详解
- python迭代器和生成器
- Python 迭代器和生成器
- Python 迭代器 生成器
- Python 迭代器和生成器
- Python迭代器和生成器
- python~迭代器~生成器~
- Python之生成器、迭代器
- python 迭代器与生成器
- Python迭代器和生成器
- python迭代器与生成器
- python 迭代器与生成器
- Python:迭代器与生成器
- Python 迭代器 生成器
- [二] rehl 6.4 更换 yum源为163的源
- C#判断字符串是否为数字字符串
- Android之生成快捷方式
- QtQuick中使用ListView注意事项
- Laravel 5.2 教程 - 文件上传
- python迭代器以及生成器
- C#中Split用法~字符 数组串
- Redis集群规范(一)
- (常用时间类练习)可视化简易日历
- Contest - 多校训练(三
- Android Studio查看android源码
- Python学习笔记1
- Laravel 5.2 教程 - 队列
- HDu 5855