python创建生成器以及访问的方法详解
作者:惊瑟
这篇文章主要介绍了python创建生成器以及访问的方法详解,与列表一次性地将数据全都加载到内存不同的是,生成器使用推断加载数据,每次只推断出一个对象,在数据量比较大时,可以节省内存,需要的朋友可以参考下
前言
与列表一次性地将数据全都加载到内存不同的是,生成器使用推断加载数据,每次只推断出一个对象,在数据量比较大时,可以节省内存。
这篇文章简单总结下创建生成器的方法,并用举一个生成器在斐波那契应用的例子。
一、创建生成器以及访问的方法
1. map
iter1 = map(lambda x:x, [0,1,2])
2. ()
iter2 = (x for x in range(3))
3.使用yield
def iter3(): for i in range(3): yield i
看下它们的类型:
iter1 type is: <class 'map'>
iter2 type is: <class 'generator'>
iter3() type is: <class 'generator'>
其中,map类型也是生成器类型。如何访问一个生成器?以iter1为例,有以下方法:
# 1.一个个访问 print(next(iter1)) # 2.使用for访问 for i in iter1: print(i) break # 3.转化为列表访问 print(list(iter1))
输出:
0
1
[2]
二、生成器的应用
使用迭代法来求解斐波那契数列:
# 使用生成器构菲波那契数列,数列下标从1开始 def fib(n): a,b,i = 0,1,0 while i<n: yield b a,b = b,a+b i += 1 def get_fib(n): # 此时fib(n)是一个生成器 gener = fib(n) for i in range(n-1): next(gener) return next(gener) print(get_fib(3))
到此这篇关于python创建生成器以及访问的方法详解的文章就介绍到这了,更多相关python生成器及访问方法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!