抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

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:#处理迭代单个对象引起的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()


评论