python语言的迭代器,用于访问集合元素,可以记录访问的位置的对象,迭代器的基本方法:iter和next
python语言的生成器,可以返回迭代器对象,关键字yield。
个人理解:
迭代器和生成器,在python中,迭代器方法 iter 和 next;
iter方法创建一个迭代器
next方法依次取值;迭代器的强大之处在于它能记录你的取值位置
生成器,返回一个迭代器
生成器的关键字yield
yield的语法类似return,具有返回作用,但是,yeild不同于return;
return返回执行返回空或具体的值后,不在执行同代码组的后续代码,例如在函数中,执行return后,该函数的后续代码将不在执行;而yield方法,返回具体值并会记录该值,代码可以继续执行,直到改代码组代码执行结束。
迭代器示例代码:
# 代码-迭代器
list0 = [1,2,3,4]
it = iter(list0)
print(type(list0))#<class 'list'>
print(type(it))#<class 'list_iterator'>
'''
print(next(it))#1
print(next(it))#2
print(next(it))#3
print(next(it))#4
# print(next(it))#报错 StopIteration
'''
'''
#for 循环访问迭代器
for x in it:
print(x)
'''
'''
#使用sys模块,迭代器访问结束退出
import sys
while True:
try:
print(next(it))
except StopIteration:
sys.exit()
'''
# 自定义类迭代器
# class MyNumber:
# def __iter__(self):
# self.a = 1
# return self
#
# def __next__(self):
# if self.a <= 10:
# x = self.a
# self.a +=1
# return x
# else:
# raise StopIteration
# # x = self.a
# # self.a += 1
# # return x
#
# if __name__ == '__main__':
# myclass = MyNumber()
# myiter = iter(myclass)
# print(next(myiter))
# print(next(myiter))
# print(next(myiter))
# print(next(myiter))
# print(next(myiter))
# print(next(myiter))
# for i in myiter:
# print(i)
生成器创建迭代器代码:(经典代码-裴波那契数列)
# 生成器
'''
yield
'''
import sys
def fibonacci(n):#生成器函数-裴波那契数列
a,b,counter = 0,1,0
while True:
if (counter > n):
return
yield a
a,b = b , a+b
counter+=1
f = fibonacci(10)#f是一个迭代器,由生成器返回生成
while True:
try:
print(next(f),end=' ')
except StopIteration:
sys.exit()
网友评论