美文网首页
python3的迭代器和生成器

python3的迭代器和生成器

作者: feitry | 来源:发表于2019-08-23 11:14 被阅读0次

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()

相关文章

网友评论

      本文标题:python3的迭代器和生成器

      本文链接:https://www.haomeiwen.com/subject/rlezsctx.html