python迭代、可迭代、迭代器举例分析

这篇文章主要讲解了“python迭代、可迭代、迭代器举例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python迭代、可迭代、迭代器举例分析”吧!

创新互联是一家集网站建设,济南企业网站建设,济南品牌网站建设,网站定制,济南网站建设报价,网络营销,网络优化,济南网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。

下面我们通过斐波那契数列类的案例来详细了解迭代器、生成器。

class Fib(object):
    # count表示生成斐波那契数列的个数
    def __init__(self, count):
        self.count = count
        # 保存前两个值
        self.x = 0
        self.y = 1
        # 记录生成数列的下标
        self.index = 0

    # 声明Fib类是可迭代的
    def __iter__(self):
        return self

    # 生成下一个数
    def __next__(self):
        if self.index < self.count:
            result = self.x
            self.x, self.y = self.y, self.x + self.y
            self.index += 1
            return result
        else:
            raise StopIteration


# 创建迭代器
fib = Fib(6)
# 获取迭代器下一个值
print(next(fib))

# 遍历迭代器其余的值
for value in fib:
    print(value)
    
print(fib)
ll = (i for i in range(10))
print(ll)

out:
0
1
1
2
3
5
<__main__.Fib object at 0x000001E493DF5700>
 at 0x000001E493936430>

迭代器(iterator)

迭代器指有__iter__方法的函数或类运行或创建实例后生成的命名空间。打印迭代器显示的就是某某对象在内存某处,迭代器实质是一个内存地址,通过特定的方法访问该地址可以获得相应的数据。

紧接着前面的代码,测试下列代码。

fib1 = Fib(6)
fib2 = Fib(5)
print(fib1)
print(fib2)

out:
<__main__.Fib object at 0x000001AD3E445700>
<__main__.Fib object at 0x000001AD3E48A4F0>

可以看到fib1和fib2虽然内部代码相同,但由于它们的参数不同所以它们有不同的命名空间,那么它们就是不同的迭代器。

生成器(generator)

生成器指获取迭代器内部数据的方法或函数。注意方法和函数本身不是生成器,只有执行后有命名空间且可以返回值的才是生成器。

def even(n):  # 定义一个返回值是偶数的生成器,值范围在0至n之间
    i = 0
    while i <= n:
        if i % 2 == 0:
            yield i
        i += 1


print('__iter__' in dir(even))
print('__next__' in dir(even))

num = even(5)

print('__iter__' in dir(num))
print('__next__' in dir(num))

out:
False
False
True
True

生成器有2种:

  1. 通过__next__方法return返回值。例子是上面的Fib类。

  2. 通过yield或yield from语句返回值。例子是上面的even函数。有yield或yield from语句的函数在执行后会自动生成__iter__方法和__next__方法。

感谢各位的阅读,以上就是“python迭代、可迭代、迭代器举例分析”的内容了,经过本文的学习后,相信大家对python迭代、可迭代、迭代器举例分析这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是创新互联,小编将为大家推送更多相关知识点的文章,欢迎关注!


新闻名称:python迭代、可迭代、迭代器举例分析
网页URL:http://azwzsj.com/article/ijejid.html