简单来说,generator是一个能够返回迭代器对象的函数.

yield的使用

在python中,当你定义一个函数,使用了yield关键字时,这个函数就是一个生成器,它的执行会和其他普通的函数有很多不同,函数返回的是一个对象,而不是你平常 所用return语句那样,能得到结果值。如果想取得值,那得调用next()函数,如:

c = h() #h()包含了yield关键字
#返回值
c.next()

每当调用一次迭代器的next函数,生成器函数运行到yield之处,返回yield后面的值且在这个地方暂停,所有的状态都会被保持住,直到下次next函数被调用,或者碰到异常循环退出(也就是说,yield一般是放在循环里面的)。

def fib(max):
a, b = ,
while a < max:
yield a #generators return an iterator that returns a stream of values.
a, b = b, a+b

程序运行:

for n in fib():
print n

yield其他例子展示:排列,组合

#生成全排列

def perm(items, n = None):
if n is None:
n = len(items)
for i in range(len(items)):
v = items[i:i+]
if n==:
yield v
else:
rest = items[:i] + items[i+:]
for p in perm(rest, n-):
yield v + p
def comb(items, n = None):
if n is None:
n = len(items)
else:
for i in range(len(items)):
v = items[i:i+]
if == n:
yield v
else:
rest = items[i+:]
for c in comb(rest, n-):
yield v + c

上面这两个例子写的真好。

我自己实验了一下,发现生成全排列好使,但是生成组合的好像没啥用。

def perm(items, n = None):
if n is None:
n = len(items)
for i in range(len(items)):
v = items[i:i+]
if n==:
yield v
else:
rest = items[:i] + items[i+:]
for p in perm(rest, n-):
yield v + p def comb(items, n = None):
if n is None:
n = len(items)
for i in range(len(items)):
v = items[i:i+]
if == n:
yield v
else:
rest = items[i+:]
for c in comb(rest, n-):
yield v + c def main():
items = [,,] for x in perm(items):
print x print '-' * for x in comb(items):
print x if __name__ == '__main__':
main()

结果:

$ python generator_demo.py
[, , ]
[, , ]
[, , ]
[, , ]
[, , ]
[, , ]
--------------------
[, , ]
 

最新文章

  1. java包(package)的命名规范
  2. block,inline和inline-block概念和区别(转)
  3. Spring Trasnaction管理(1)- 线程间事务隔离
  4. Docker入门教程(七)Docker API
  5. iTween基础之Shake(摆动)
  6. MySQL存储过程中的3种循环
  7. php中getimagesize函数的用法
  8. 【LeetCode】Min Stack 解题报告
  9. Python 对Twitter中指定话题的Tweet基本元素的频谱分析
  10. 将USBASP改造成STK502编程器(转)
  11. [leetcode-604-Design Compressed String Iterator]
  12. Python打印乘法口诀表
  13. 设计模式学习(四): 1.简单工厂 (附C#实现)
  14. Bad Hair Day [POJ3250] [单调栈 或 二分+RMQ]
  15. java开发环境配置——IDEA SVN的使用
  16. ES6相关
  17. CSS+HTML+JQuery实现条形图
  18. JDK1.7 HashMap 导致循环链表
  19. GPT转MBR怎么转?
  20. [Phalcon-framework]2016-04-13_安装使用 Phalcon 框架

热门文章

  1. 【HDU 6162】 Ch’s gift
  2. 手机网站下拉加载数据js(简单版)
  3. Redis(四)-配置
  4. CABasicAnimation - 上下滑动动画
  5. 设计模式之桥接模式(Java语言描述)
  6. MySQL笔试题搜罗
  7. AI:IPPR的数学表示-CNN方法
  8. 【sqli-labs】 less28a GET- Blind based -All you Union&amp;Select Belong to us -String -Single quote-parenthesis(GET型基于盲注的去除了Union和Select的单引号带括号字符型注入)
  9. mysql安装包下载地址
  10. node mysql es6/es7改造