Python入门教程之迭代器和生成器

栏目: Python · 发布时间: 6年前

内容简介:在Python如果一个对象可被循环(遍历)该对象中每一个元素的过程叫做迭代。例如 ,字典、字符串、列表、元祖、集合等。他们可被迭代的原因是,都有一个共同的内置函数flag=Truel=[x for x in range(1,101)]

迭代器

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

flag=True

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

l_iter = l.__iter__()

while flag:

try:

item=l_iter.__next__()

if item==51:

flag=False

break

else:

print(item)

except:

break

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

生成器:

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

我们可以这样写

def fib1(max):

n,a,b=0,0,1

while n<max:

print(b)

a,b=b,a+b

n=n+1

return 'done'

a=fib1(5)

print(a)

输出结果

1

1

2

3

5

done

推导过程如图

Python入门教程之迭代器和生成器

用另外一种方法

def fib2(max):

n,a,b=0,0,1

while n<max:

yield b

a,b=b,a+b

n=n+1

return 'done'

调用该函数

1 a=fib2(5)

2 print(a)

输出结果 1 <generator object fib at 0x0000000002800518>

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

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

1 a=fib2(5)

2 for c in a:

3    print(c)

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

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

Linux公社的RSS地址https://www.linuxidc.com/rssFeed.aspx

本文永久更新链接地址: https://www.linuxidc.com/Linux/2018-10/154609.htm


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

轻松学算法

轻松学算法

赵烨 / 电子工业出版社 / 2016-7 / 69.00元

《轻松学算法——互联网算法面试宝典》共分为12 个章节,首先介绍了一些基础的数据结构,以及常用的排序算法和查找算法;其次介绍了两个稍微复杂一些的数据结构——树和图,还介绍了每种数据结构和算法的适用场景,之后是一些在工作与面试中的实际应用,以字符串、数组、查找等为例介绍了一些常见的互联网面试题及分析思路,便于读者了解这些思路,顺利地通过互联网公司的面试;最后介绍了一些常见的算法思想,便于读者对今后遇......一起来看看 《轻松学算法》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

html转js在线工具
html转js在线工具

html转js在线工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具