设为首页 加入收藏

TOP

关于 Python迭代器和生成器
2019-09-14 00:53:37 】 浏览:116
Tags:关于 Python 成器

一、迭代器


迭代器是一个可以记住遍历的位置的对象。
迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。
字符串,列表或元组对象都可用于创建迭代器。


1、迭代器有两个基本的方法:
iter() 创建迭代器对象
next() 输出迭代器的下一个元素


from collections.abc import Iterator


s = '123'
it1 = iter(s)
print(isinstance(it1, Iterator)) #判断一个对象是否迭代器对象,输出:True
print(next(it1)) #输出:1
print(next(it1)) #输出:2
print(next(it1)) #输出:3
#print(next(it1)) #超出范围会运行报错StopIteration


li = [1,2,3]
it2 = iter(li)
print(next(it2)) #输出:1
print(next(it2)) #输出:2
print(next(it2)) #输出:3


it3 = iter(li)
#用list可将迭代器转换为列表
print(list(it3))


关于 Python迭代器和生成器


2、迭代器遍历的两种方式:for、while


import sys


s = '123'
it1 = iter(s)
for i in it1:
    print(i)



li = [1,2,3]
it2 = iter(li)
while True:
    try:
        print(next(it2))
    except StopIteration:
        sys.exit()


关于 Python迭代器和生成器


3、把一个类作为迭代器使用:在类中实现__iter__()与 __next__() 方法


# 斐波那契数列
class Fibs:
    def __init__(self):
        self.a = 0
        self.b = 1
    def __next__(self):
        self.a,self.b = self.b, self.a+self.b
        return self.a
    def __iter__(self):
        return self


fibs = Fibs()
for f in fibs:
    if f > 1000:
        print(f)
        break


关于 Python迭代器和生成器


二、生成器


生成器是一种特殊的迭代器,使用了 yield 的函数被称为生成器,即生成器是一个返回迭代器的函数,只能用于迭代操作。


1、创建生成器


# 生成器函数
def Fibs(n):
    a, b, counter = 0, 1, 0
    while True:
        if (counter > n):
            return
        yield a
        a, b = b, a + b
        counter += 1



f = Fibs(6) # f是一个迭代器
print(next(f))
print(next(f))
print(next(f))    #可以用next
print(f.__next__()) #也可以用__next__
print(f.__next__())
print(f.__next__())
print(f.__next__())


'''输出:
0
1
1
2
3
5
8
'''
for f in Fibs(6):
    print(f)
'''输出:
0
1
1
2
3
5
8
'''


关于 Python迭代器和生成器


2、生成器表达式


生成器表达式与列表推导式类似,不同之处是最外层的[]换成(),不立即执行循环,而是返回一个生成器。


r = (i*2 for i in range(5))
print(next(r))
print(next(r))
print(next(r))
print(next(r))
print(next(r))


'''输出:
0
2
4
6
8
'''


''' 也可以遍历
for i in r:
    print(i)
'''



r2 = sum(i*2 for i in range(5))
print(r2)


'''输出:
20
'''


关于 Python迭代器和生成器


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Java反射机制点滴知识 下一篇C++中const的简单用法

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目