pyhon迭代器和yield
2018-03-24 09:46
103 查看
python yield其实是迭代器的一种简单写法
一般的迭代器会定义
比如以斐波那契数列为例
用yield则可以自动实现迭代的目的,原理是:
yield 把函数变成一个 generator,调用时不会执行函数返回结果,而是返回一个 iterable 对象!在 for 循环执行时,执行到 yield时,返回一个迭代值,下次迭代时,代码从 yield的下一条语句继续执行,直到再次遇到 yield。
上面代码可以简化为
编写的自由度提高了,而且更方便迭代,可以在一个for循环内多次设置yield,不像单个类只能在return的时候返回yield
举例来说,处理分支逻辑,比如上面的斐波那契数列对于偶数需要两次返回(此处无实际意义):
一般的迭代器会定义
__iter__函数
比如以斐波那契数列为例
>>> class Fabo(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 = self.n + 1 ... return r ... raise StopIteration() ... >>> list = [] >>> for i in Fabo(10): ... list.append(i) ... >>> list [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
用yield则可以自动实现迭代的目的,原理是:
yield 把函数变成一个 generator,调用时不会执行函数返回结果,而是返回一个 iterable 对象!在 for 循环执行时,执行到 yield时,返回一个迭代值,下次迭代时,代码从 yield的下一条语句继续执行,直到再次遇到 yield。
上面代码可以简化为
>>> def fabo(max): ... n, a, b = 0, 0, 1 ... while n < max: ... yield b ... a, b = b, a + b ... n = n + 1 ... >>> list = [] >>> for i in fabo(10): ... list.append(i) ... >>> list [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
编写的自由度提高了,而且更方便迭代,可以在一个for循环内多次设置yield,不像单个类只能在return的时候返回yield
举例来说,处理分支逻辑,比如上面的斐波那契数列对于偶数需要两次返回(此处无实际意义):
>>> def fabo(max): ... n, a, b = 0, 0, 1 ... while n < max: ... if not b%2: ... yield b ... yield b ... a, b = b, a + b ... n = n + 1 ... >>> list = [] >>> for i in fabo(10): ... list.append(i) ... >>> list [1, 1, 2, 2, 3, 5, 8, 8, 13, 21, 34, 34, 55]
相关文章推荐
- java之yield(),sleep(),wait()区别详解-备忘笔记
- windows mobile 6.5.3 ERROR: Power Handler function yield to low priority thread.
- ylbtech-LanguageSamples-Yield
- python yield
- Java线程中yield与join方法的区别
- Java Thread.yield详解
- 黑马程序员——多线程(Lock、setDaemon、join、setPriority、yield)
- 深入理解python中的yield
- 多线程 -- yield()方法和sleep()方法的区别
- java-线程的sleep(),wait(),notify(),yield()方法的区别
- Python yield 使用浅析
- Python 深入理解yield
- 线程sleep和yield的区别
- sleep、join、yield、notify、notifyall
- java的join和yield方法处理线程顺序执行
- what yield does in python?
- yield和send的执行循序彻底搞清
- Python yield深度解析
- yield return in C#
- 飘逸的python - yield简明教程