迭代器
迭代器的理解,学过Java的都是知道的,java也是都是由迭代器的,而且是一种设计思想,实际上。可以把迭代器理解成一种特殊的 list + function实际上,迭代器是一个特殊的函数
迭代器的特性
- 可迭代的
- 使用next这个内置函数来移动内部的下一个指针
- 通过 for 遍历的时候实际也是调用 next,遍历结束,意味着使用 next 的次数已经超出
迭代器的创建方法
- 将列表生成表达式 [] 换成 () 之后我们得到的就是一个 generator()
g = (x for x in range(1,11)) # 这样,我们的g就是一个迭代器
- 类似函数,但是使用 yield 关键字
def t_yield():
yield 0
yield 1
yield 2
yield 3
g = t_yield()
for item in g:
print(item)
上面的代码里面,我们每次调用一次 next() 函数,g就会返回一个 yield 后面的值
迭代器是函数,怎么获取返回值
正常情况下,next 可以获取迭代器的下一个值,既然能够获取下一个值,就说明这个迭代器函数就还没有结束,因此我们要获取返回值,就需要迭代器的 yield 都已经结束了
def t_yield():
_sum = 0
for i in range(0, 2):
_sum += i
yield i
return _sum
# 正常便利,遍历结束意味着 next 指针已经指向了最后,再次执行将会返回(报错)
g = t_yield()
for item in g:
print(item)
try:
a = next(g)
except StopIteration as e: # 实际的错误是 StopIteration
print(e.value) # None ??? 为什么
再看看下面的结果
def t_yield():
_sum = 0
for i in range(0, 2):
_sum += i
yield i
return _sum
# 正常便利,遍历结束意味着 next 指针已经指向了最后,再次执行将会返回(报错)
g = t_yield()
next(g)
next(g)
try:
a = next(g)
except StopIteration as e: # 实际的错误是 StopIteration
print(e.value) # 2
标签:迭代,python,sum,yield,next,item,print
From: https://www.cnblogs.com/sqmw/p/17422602.html