Python的迭代器和生成器

列表生成式

列表生成式可以快速创建list。

>>> [x * x for x in range(1, 11) if x % 2 == 0]
[4, 16, 36, 64, 100]

迭代对象

  常用的迭代对象有str、list、dict等,可以通过dir函数来查看对象的所有方法,可迭代对象有__iter__方法,有__iter__方法的对象都可以进行for循环。

迭代器

  可以被__next__()函数调用并不断返回下一个值的对象称为迭代器,对象的__iter__()方法就可以获取到对象的迭代器,使用__next__()方法获取对象迭代过程中的下一个元素。

使用while循环+迭代器来模拟for循环:

lst = [1,2,3]
lst_iter = lst.__iter__()
while 1:
try:
i = lst_iter.__next__()
print(i)
except StopIteration:
break

生成器

  python中可以一边循环一边计算的机制称为生成器:generator,生成器也是可迭代对象。

创建生成器方法一:

>>> g = (x * x for x in range(10))
>>> g
<generator object <genexpr> at 0x1022ef630>

创建方式二:

  函数中包含yield关键字,此时这个函数就是生成器函数。

def fib(max):
n, a, b = 0, 0, 1
while n < max:
yield b
a, b = b, a + b
n = n + 1
return 'done'

  generator和普通函数的执行流程不一样,普通函数顺序执行,遇到return或者函数最后一行就返回,而generator函数每次调用next()执行,遇到yield语句返回,当再次执行时从上次返回的yield语句出继续执行。

def odd():
print('step 1')
yield 1
print('step 2')
yield(3)
print('step 3')
yield(5) >>> o = odd()
>>> next(o)
step 1
1
>>> next(o)
step 2
3
>>> next(o)
step 3
5
>>> next(o)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
上一篇:Jquery 输入金额格式限制 插件


下一篇:AnkhSVN 安装