python打乱迭代器_Python学习之迭代器和生成器

本文介绍了Python中的迭代器和生成器的基本概念及使用方法。详细解释了如何利用迭代器进行元素遍历,并展示了生成器在节省内存方面的优势。
部署运行你感兴趣的模型镜像

迭代器

在Python如果一个对象可被循环(遍历)该对象中每一个元素的过程叫做迭代。例如 ,字典、字符串、列表、元祖、集合等。他们可被迭代的原因是,都有一个共同的内置函数__iter__。通过执行内置对象的__next__函数,可以依次打印该对象的所有元素。例如 有一个列表,该列表存储了1-100的数值,但是我们只想打印前50的个元素。

1 flag=True2 l=[x for x in range(1,101)]3

4 l_iter = l.__iter__()5 whileflag:6 try:7 item=l_iter.__next__()8 if item==51:9 flag=False10 break

11 else:12 print(item)13

14 except:15 break

在While循环中迭代器将一直循环执行__next__()函数,但迭代器本身并不知道它要迭代多少个元素。当执行到最后元素时,还会继续执行__next__()函数,但此时没有元素可被迭代了,由于迭代器找不到可被迭代元素,将会报错。因此我们在使用while循环时,配合异常捕获代码 try except一起使用,当迭代过程中出现异常,将会自动停止下一次循环。

用迭代器生成列表(2.7版本有效)

1 classTestIterator:2 value=0

3 def next(self):4 self.value+=1

5 if self.value>10: raise StopIteration6 returnself.value7 def __iter__(self):8 returnself9 ti=TestIterator()10 ret=list(ti)11 print(ret)

输出结果:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

生成器:

假设我们 有个需求,除第一个 和第二个元素外,其他元素依次为前两个元素之和。

我们可以这样写

1 deffib1(max):2 n,a,b=0,0,1

3 while n<4 print a n="n+1</p">

7 return 'done'

8

9 a=fib1(5)10 print(a)

输出结果

1 1

2 1

3 2

4 3

5 5

6 done

推导过程如图

用另外一种方法

1 deffib2(max):2 n,a,b=0,0,1

3 while n<4 yieldb5 a n="n+1</p">

7 return 'done'

调用该函数

1 a=fib2(5)2 print(a)

输出结果 1

此时我们发现,不能像之前那样直接显示结果,此时定义的fib并不是一个简单的函数,而是被改造成了生成器。如果想知道生成的结果可以依次执行__next__函数,但每次只返回一个结果,当没有更多的元素可以被迭代时将会抛出异常。

另外我们也可以使用for 循环和while(需配合try  except使用)打印结果。

1 a=fib2(5)2 for c ina:3 print(c)

显示输出结果 1 1 2 3 5.

使用生成器的好处:生成器是根据推导的过程计算下一个元素。再看前两个函数 fib1 和fib2 ,fib1在计算机中开辟一个固定的内存空间用于存储完整的计算结果,但如果我们想访问计算结果中的某一个元素,就需要先遍历整个计算结果,才能通过对象下标或者用for 循环和if条件判断 拿到我们想要的结果,这样做的可以实现我们的需求,但将会耗损较多的内存空间。而fib2则是依据推算过程计算出下一个元素,因此我们就可以在未创建完整对象之前获取我们想要的元素。从而降低内存消耗。

4>4>

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值