什么是生成器?
-- 动态的生成有规律的列表和元组,查询多少才会生成多少数据,不需要时数据不存在
- 大到10几万数据,就省空间了
什么是列表生成式?
-- [ handle_i_result for i in range(start,end,step)] - 列表成式
-- handle_i_result 是对 i (迭代对象)进行处理 (i*2 i*3 ......)
-- [i*2 for i in range(10)] 生成 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
什么是生成器?
builder_1 = (handle_i_result for i in range(start,end,step)) # 定义一个生成器
builder_1 = (i*2 for i in range(0,10)) builder_1.__next__() # 生成第1元素 builder_1.__next__() # 生成第2个元素
-- 坑:只记住当前位置,只有__next__() 去取值,只能取下一个值 -- py2中为next()方法
还有其他的生成器?
-- 函数也可以做生成器
- 斐波那契数列 除了第 1 和第 2 个数,其他数都是前两个数相加和
[1,1,2,3,5,8,13 , ......]
#!/usr/bin/python3 def fib(max_1): n, a, b = 0, 0, 1 while n < max_1: yield b a, b = b, a+b n += 1 if __name__ == '__main__': get_number = 30 # 想获得多少个斐波拉契数 try: fib_1 = fib(20) for i in range(get_number): print(fib_1.__next__()) except: print("取的位数大于生成的个数,嘻嘻") # 通过yield 执行从函数中跳出来了,再通过__next__方法重新回到函数,yield把函数变成器, # 定义了20个长度斐波那契数列,如果__next__取的值多了,就会出现异常