Python学习-生成器 - Generator
2024-09-08 06:15:16
简单来说,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
[, , ]
[, , ]
[, , ]
[, , ]
[, , ]
[, , ]
--------------------
[, , ]
最新文章
- java包(package)的命名规范
- block,inline和inline-block概念和区别(转)
- Spring Trasnaction管理(1)- 线程间事务隔离
- Docker入门教程(七)Docker API
- iTween基础之Shake(摆动)
- MySQL存储过程中的3种循环
- php中getimagesize函数的用法
- 【LeetCode】Min Stack 解题报告
- Python 对Twitter中指定话题的Tweet基本元素的频谱分析
- 将USBASP改造成STK502编程器(转)
- [leetcode-604-Design Compressed String Iterator]
- Python打印乘法口诀表
- 设计模式学习(四): 1.简单工厂 (附C#实现)
- Bad Hair Day [POJ3250] [单调栈 或 二分+RMQ]
- java开发环境配置——IDEA SVN的使用
- ES6相关
- CSS+HTML+JQuery实现条形图
- JDK1.7 HashMap 导致循环链表
- GPT转MBR怎么转?
- [Phalcon-framework]2016-04-13_安装使用 Phalcon 框架
热门文章
- 【HDU 6162】 Ch’s gift
- 手机网站下拉加载数据js(简单版)
- Redis(四)-配置
- CABasicAnimation - 上下滑动动画
- 设计模式之桥接模式(Java语言描述)
- MySQL笔试题搜罗
- AI:IPPR的数学表示-CNN方法
- 【sqli-labs】 less28a GET- Blind based -All you Union&;Select Belong to us -String -Single quote-parenthesis(GET型基于盲注的去除了Union和Select的单引号带括号字符型注入)
- mysql安装包下载地址
- node mysql es6/es7改造