-
生成器是一类特殊的迭代器,它不需要再像上面的类一样写iter()和next()方法了, 使用更加方便,它依然可以使用next函数和for循环取值
-
创建生成器的方法一:
-
只要把一个列表生成式的[]改成(),就创建了一个生成器
-
>>> (i for i in range(0,5))
at 0x102c38360> -
我们可以看到他的类型是genexpr
-
-
创建生成器的方法二:
-
只要在def中有yield关键字的 就称为 生成器
-
def gen(): i =0 while i<5: temp = yield i print(temp) i+=1
-
g = gen() for i in g: pring(i)
-
next(f)
-
f = gen() next(f) #首次调用必须是next,因为生成器还没有执行到yield 无法进行接收值 f.send('haha') #send 发送值 传递给生成器 由temp进行接收 next(f) #再次调用next 相当于send了一个None f.send('haha')
-
def fibonacci(num): # 初始化第一个值和第二个值 a =0 b =1 # 记录生成fibonacci数字的下标 current_index =0 while current_index < num: result = a a, b = b, a + b current_index +=1 # 代码执行到yield会暂停,然后把结果返回出去,下次启动生成器会在暂停的位置继续往下执行 yield result for i in fibonacci(5): print(i)
-
yield和return的对比
-
-
yield的使用生成菲波那切数列:
-
还可以调用send方法给yield传值
-
我们也可以使用next方法取值
-
我们可以使用for循环遍历生成器
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)