生成器本质上也是一种迭代器,但是它只能迭代一次,其与三个概念息息相关。
- 可迭代对象 定义了iter方法或getitem方法
- 迭代器 定义了next方法
- 迭代 使用循环遍历某个东西时就是迭代
#python2的标准库大多返回列表,python3多返回生成器(占用更少的资源)
生成器与yield结合使用
案例1 生成器的简单实用
#案例1
def func(n):
for i in range(n):
yield i**2
#func(10)
for x in func(10):
print(x)
-------------
0
1
4
9
16
25
36
49
64
81
案例2 斐波那契数列
#若使用列表
def fibon(n):
a=b=1
result=[]
for i in range(n):
result.append(a)
a,b=b,a+b
return result
print(fibon(10))
---------------------
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
#若使用生成器
def fibon(n):
a=b=1
for i in range(n):
yield b #执行到当前语句时的返回值为b
a,b=b,a+b
for x in fibon(10):
p