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
def flagtten(nested):
try:
for sublist in nested:
for element in flagtten(sublist):
yield element
except TypeError:#处理迭代单个对象引起的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
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()


 评论


博客内容遵循 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议

本站使用 Material X 作为主题 , 总访问量为 次 。