python生成器(generator)
- 生成器是一种使用普通函数语法定义的迭代器
- 包含yield语句的函数都是生成器,它是一个不断产生值的函数
- 生成器每次使用yield产生一个值后,函数都将冻结,即在此处停止执行,等待重新被唤醒。被唤醒后从停止的地方开始继续执行
生成器推导(生成器表达式)
*** 使用圆括号()
创建一个生成器推导 ***,它创建了一个可迭代的对象
使用next()函数可以获得生成器推导的下一个返回值
g = (i**2 for i in range(10))
simple generator
** demo_1 **
斐波拉契数列(Fibonacci),除第一个和第二个数外,任意一个数都可由前两个数相加得到
** demo_2_generator **
recursive generator
处理多层嵌套列表
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| def flagtten(nested): try: for sublist in nested: for element in flagtten(sublist): yield element except TypeError: yield nested
def main(): s = list(flagtten([1,[2,3]])) print(s)
main()
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| def flagtten(nested): try: try: nested + '' except TypeError: pass else: raise TypeError for sublist in nested: for temp in flagtten(sublist): yield temp except TypeError: yield nested
def main(): s = list(flagtten(["haha",["shan","san"]])) print(s)
main()
|