最近开始看python,脑子不太好使,生成器这边老是不理解,所以转一篇以后经常看看啦
迭代器就是重复地做一些事情,可以简单的理解为循环,在python中实现了__iter__方法的对象是可迭代的,实现了next()方法的对象是迭代器,这样说起来有点拗口,实际上要想让一个迭代器工作,至少要实现__iter__方法和next方法。很多时候使用迭代器完成的工作使用列表也可以完成,但是如果有很多值列表就会占用太多的内存,而且使用迭代器也让我们的程序更加通用、优雅、pythonic。下边是一个例子,从里边你会感受到不用列表而用迭代器的原因。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
#!/usr/bin/env python
#coding=utf-8
class
Fib:
def
__init__(
self
):
self
.a,
self
.b
=
0
,
1
def
next
(
self
):
self
.a,
self
.b
=
self
.b,
self
.a
+
self
.b
return
self
.a
def
__iter__(
self
):
return
self
fibs
=
Fib()
for
f
in
fibs:
if
f <
10000
:
print
f
else
:
break
|
迭代器是一个对象,而生成器是一个函数,迭代器和生成器是python中两个非常强大的特性,编写程序时你可以不使用生成器达到同样的效果,但是生成器让你的程序更加pythonic。创建生成器非常简单,只要在函数中加入yield语句即可。函数中每次使用yield产生一个值,函数就返回该值,然后停止执行,等待被激活,被激活后继续在原来的位置执行。下边的例子实现了同样的功能:
1
2
3
4
5
6
7
8
9
10
11
12
|
#!/usr/bin/env python
#coding=utf-8
def
fib():
a,b
=
0
,
1
while
1
:
a,b
=
b,a
+
b
yield
a
for
f
in
fib():
if
f <
10000
:
print
f
else
:
break
|