您的位置:首页 > 编程语言 > Python开发

python迭代器

2015-10-27 16:28 567 查看
#
# 迭代器
# 使用  [x * x for x in range(size)]  方式创建列表时,内存中一
# 下生成了指定大小的空间,若size很大,则会非常耗费内存空间,但如果使用
# 迭代器,每次需要时便获取一个,会节省空间,而且会延迟计算 x*x
generator=( x*x for x in range(5)  )
print generator

print generator.next()
print generator.next()
print generator.next()
print generator.next()
print generator.next()

print generator.next()
#
# 打印如下
# <generator object <genexpr> at 0x102bd1b90>
# 0
# 1
# 4
# 9
# 16
# Traceback (most recent call last):
#   File "/Users/young/Documents/workspace_python/python1/src/main.py", line 17, in <module>
#     print generator.next()
# StopIteration

# 当第6次调用next时会报错,因为已经指定了是5

generator=( x*x for x in range(5)  )

# 当然也可以按如下方式遍历
for ele in generator:
print ele

# 打印如下
# 0
# 1
# 4
# 9
# 16


# 迭代函数
# 如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator:

# generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行
def fib(max):
n, a, b = 0, 0, 1
while n < max:
yield b
a, b = b, a + b
n = n + 1

gene=fib(8)

print gene.next()
print gene.next()
print gene.next()
print gene.next()
print gene.next()
print gene.next()
print gene.next()
print gene.next()
print gene.next()

# 打印如下
# 1
# 2
# 3
# 5
# 8
# 13
# 21
# Traceback (most recent call last):
#   File "/Users/young/Documents/workspace_python/python1/src/main.py", line 25, in <module>
#     print gene.next()
# StopIteration


# 再例如
def odd():
print 'step 1'
yield 1
print 'step 2'
yield 3
print 'step 3'
yield 5

ge=odd()

ge.next()
ge.next()
ge.next()
ge.next()

打印如下
step 1
step 2
step 3
Traceback (most recent call last):
  File "/Users/young/Documents/workspace_python/python1/src/main.py", line 18, in <module>
    ge.next()
StopIteration
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python