生成器能让看上去的一个函数暂停执行,通过next()或send()继续执行
1,如同列表生成方式,把[]换成()
1 nums = (x*2 for x in range(10)) 2 3 for num in nums: 4 print(num)
结果:
0 2 4 6 8 10 12 14 16 18
2.函数 + yield
1 # 第二种方式 2 def creat_num(all_num): 3 a,b = 0,1 4 current_num = 0 5 while current_num < all_num: 6 yield a # 如果一个函数中有yield语句,那么这个就不再是函数,而是一个生成器的模板 7 a, b = b, a+b 8 current_num += 1 9 10 # 如果在调用creat_num的时候,发现这个函数中有yield,那么此时,不是调用函数,而是创建一个生成器对象 11 obj = creat_num(10) 12 13 for num in obj: 14 print(num)
0 1 1 2 3 5 8 13 21 34